Те, як ви ставите запитання (і пропонуєте дві альтернативи), начебто хвилює лише те, що водійський ідентифікатор все ще дійсний під час створення машини.
Однак ви також повинні бути стурбовані тим, що драйвер, пов’язаний з driverId, не видаляється до того, як машину буде видалено або надано інший драйвер (і, можливо, також, що драйвер не призначений для іншого автомобіля (це, якщо домен обмежує водія лише бути пов'язаним з одним автомобілем)).
Я пропоную замість валідації виділити (що включало б перевірку присутності). Тоді ви забороняєте видалення, поки все ще виділяєте, таким чином захищаючи від перегонів стану несвіжих даних під час будівництва, а також інших довгострокових проблем. (Зверніть увагу, що розподіл присвоєно як валідатам, так і позначкам, і працює атомно.)
До речі, я погоджуюся з @PriceJones, що зв'язок між автомобілем та водієм, ймовірно, є відповідальністю окремо від машини чи водія. Цей вид асоціацій з часом лише посилиться, оскільки це звучить як проблема планування (водії, автомобілі, часові проміжки / вікна, замінники тощо). Навіть якщо це більше нагадує проблему з реєстрацією, можна захотіти історичну реєстрації, а також поточні реєстрації. Таким чином, він може цілком заслуговувати власного БК прямо.
Ви можете надати схему розподілу (наприклад, булеву чи довідкову кількість) в межах ВС сукупностей, що виділяються, або в рамках окремої БЦ, скажімо, тієї, яка відповідає за зв'язок між автомобілем та водієм. Якщо ви зробите перше, ви можете дозволити (дійсні) операції видалення, видані автомобілю або водію BC; якщо ви зробите останнє, вам потрібно буде запобігти видаленню з автомобіля та водія BC та замість цього надіслати їх через планувальник асоціації автомобілів та водіїв.
Ви також можете розділити деякі обов'язки щодо розподілу між БК наступним чином. Кожен з автомобілів і водіїв BC надає схему "розподілу", яка підтверджує та встановлює виділений булевий з цим BC; коли встановлено булевий розподіл, BC запобігає видаленню відповідних сутностей. (І система налаштована так, що автомобіль та водій BC дозволяють розподіляти та розставляти місця тільки з планування автомобільної / водійської асоціації.
Планування автомобіля та водія BC тоді веде календар водіїв, пов'язаних з автомобілем, на певні періоди часу / тривалість, теперішнє та майбутнє, і повідомляє інші БЦ про переїзд лише про останнє використання запланованого автомобіля чи водія.
Як більш радикальне рішення, ви можете ставитися до автомобілів та водіїв BC як до придатних лише історико-заводських заводів, залишаючи право власності на планувальник асоціацій автомобілів / водіїв. Автомобіль BC може генерувати новий автомобіль у комплекті з усіма деталями автомобіля, а також його VIN. Право власності на автомобіль здійснює планувальник асоціації автомобілів / водіїв. Навіть якщо асоціація автомобіля / водія видалена, а сама машина знищена, записи автомобіля все ще існують у БК автомобіля за визначенням, і ми можемо використовувати автомобіль BC для пошуку історичних даних; в той час як асоціації / власність автомобілів / водіїв (минуле, теперішнє та потенційно майбутні заплановані) здійснює інший БК.
Driver.delete
не повинно існувати. Я ніколи не бачив домену, де агрегати знищуються. Зберігаючи АР навколо себе, ти ніколи не можеш стати сирітами.