Order имеет много Contracts
initial Contract имеет много prolongation Contracts
initial Contract может иметь много StayPeriods, но по хорошему должен иметь только один StayPeriod
после создания initial Contract и вселения в пансионат создаётся StayPeriod, который впоследствии связан с initial Contract лишь внешним ключом: StayPeriod имеет свой pansion_id и contract_id, а initial Contract имеет свои и они могут быть изменены независимо друг от друга
prolongation Contract не имеет StayPeriods (в просмотре контракта отображается StayPeriod от initial Contract)
prolongation Contracts должны быть связаны по датам: с 1 по 10, с 11 по 20. Не может быть пробелов в датах: с 1 по 10, с 12 по 20 - невозможно
если у initial Contract в StayPeriod имеется checkout_date (резидент выехал из пансионата), то prolongation Contract может быть создан, но заселение по нему нельзя произвести (создать StayPeriod): надо создавать новый initial Contract или убирать checkout_date
initial Contract и его prolongation Contracts имеют один ContractPeriod
ContractPeriod имеет ссылку на Resident, Pansion, initial Contract
ContractPeriod - это SQL View (данные в базе нельзя изменить, они генерируются автоматически с помощью встроенного sql запроса)
initial Contract не должен иметь значения в parent_contract_id и previous_contract_id (должно быть NULL)
первый prolongation Contract должен иметь initial Contract id в parent_contract_id и previous_contract_id, а последующие иметь initial Contract id в parent_contract_id и предыдущий prolongation Contract id в previous_contract_id