Entity relationships
Entities refer to each other by identifier. A field such as strataLotId holds the id of a StrataLot; a field such as documentIds holds a list of identifiers.
Principles
- Reference, don't embed. Records refer to other records by identifier rather than nesting them, so each record can be exchanged and updated independently.
- The strata corporation is the anchor. Most records carry a
strataCorporationId, which makes it easy to partition data by corporation. - Child-to-parent direction. References point from the more specific record to the more general one (a
CouncilMemberrefers to itsStrataCouncil, not the other way round). - Polymorphic references are explicit. Where a field can refer to more than one kind of entity, a companion field says which — for example
Resolution.meetingTypewithmeetingId, andOwnershipInterest.partyTypewithpartyId.
Core shape
StrataCorporation ─┬─ StrataPlan
├─ Building ── StrataLot ── Unit
│ └─ OwnershipInterest ── Person | Organization
├─ StrataCouncil ── CouncilMember ── Person
├─ GeneralMeeting / CouncilMeeting ── Resolution ── VotingRecord
├─ Fund ── FinancialTransaction / Budget / Levy
├─ CommonAsset ── MaintenanceRequest ── WorkOrder
└─ Document / InsurancePolicyAll relationships
Generated from x-relationships in the current schemas:
Core Strata Entities
- Building.strataCorporationId → StrataCorporation
- CommonProperty.strataCorporationId → StrataCorporation
- CommonProperty.designatedStrataLotIds → many StrataLot
- CommonProperty.buildingId → Building
- OwnershipInterest.strataLotId → StrataLot
- StrataCorporation.strataPlanId → StrataPlan
- StrataCorporation.managementOrganizationId → Organization
- StrataLot.strataCorporationId → StrataCorporation
- StrataLot.buildingId → Building
- Unit.strataLotId → StrataLot
Governance
- Bylaw.strataCorporationId → StrataCorporation
- Bylaw.approvedByResolutionId → Resolution
- CouncilMeeting.councilId → StrataCouncil
- CouncilMeeting.minutesDocumentId → Document
- CouncilMember.councilId → StrataCouncil
- CouncilMember.personId → Person
- GeneralMeeting.strataCorporationId → StrataCorporation
- GeneralMeeting.minutesDocumentId → Document
- Resolution.votingRecordId → VotingRecord
- StrataCouncil.strataCorporationId → StrataCorporation
- StrataCouncil.electedAtMeetingId → GeneralMeeting
- VotingRecord.resolutionId → Resolution
Financial Management
- Budget.strataCorporationId → StrataCorporation
- Budget.approvedByResolutionId → Resolution
- FinancialTransaction.strataCorporationId → StrataCorporation
- FinancialTransaction.fundId → Fund
- FinancialTransaction.strataLotId → StrataLot
- FinancialTransaction.counterpartyOrganizationId → Organization
- FinancialTransaction.levyId → Levy
- FinancialTransaction.documentIds → many Document
- Fund.strataCorporationId → StrataCorporation
- Levy.strataCorporationId → StrataCorporation
- Levy.budgetId → Budget
- Levy.approvedByResolutionId → Resolution
Maintenance and Assets
- CommonAsset.strataCorporationId → StrataCorporation
- CommonAsset.buildingId → Building
- MaintenanceRequest.strataCorporationId → StrataCorporation
- MaintenanceRequest.reportedByPersonId → Person
- MaintenanceRequest.strataLotId → StrataLot
- MaintenanceRequest.assetId → CommonAsset
- WorkOrder.strataCorporationId → StrataCorporation
- WorkOrder.maintenanceRequestIds → many MaintenanceRequest
- WorkOrder.contractorOrganizationId → Organization
Documents and Records
- Document.strataCorporationId → StrataCorporation
- Document.supersedesDocumentId → Document
Compliance and Risk
- InsurancePolicy.strataCorporationId → StrataCorporation
- InsurancePolicy.insurerOrganizationId → Organization
- InsurancePolicy.brokerOrganizationId → Organization
- InsurancePolicy.documentIds → many Document