Sposób, w jaki zadajesz pytanie (i proponujesz dwie alternatywy), jest tak, jakby jedyną obawą było to, że kierowca nadal jest ważny w momencie tworzenia samochodu.
Należy jednak obawiać się, że kierowca powiązany z kierowcą nie zostanie usunięty przed usunięciem samochodu lub przekazaniem innego kierowcy (i być może również, że kierowca nie jest przypisany do innego samochodu (jeśli domena ogranicza kierowcę tylko być powiązany z jednym samochodem)).
Sugeruję, że zamiast sprawdzania poprawności przydzielasz (co obejmuje sprawdzanie poprawności obecności). Następnie nie zezwalasz na usuwanie, gdy są jeszcze przydzielone, chroniąc w ten sposób przed wyścigiem nieaktualnych danych podczas budowy, a także przed innym problemem długoterminowym. (Należy pamiętać, że alokacja zarówno potwierdza, jak i przyznaje alokacje, i działa atomowo.)
Przy okazji, zgadzam się z @PriceJones, że powiązanie między samochodem a kierowcą jest prawdopodobnie odpowiedzialnością niezależną od samochodu lub kierowcy. Tego rodzaju powiązanie z czasem będzie się komplikować, ponieważ brzmi jak problem z planowaniem (kierowcy, samochody, przedziały czasowe / okna, zamienniki itp.). Nawet jeśli bardziej przypomina problem z rejestracją, można chcieć historycznie rejestracje, a także aktualne rejestracje. Dlatego może równie dobrze zasługiwać na własne BC.
Możesz podać schemat alokacji (taki jak wartość logiczna lub liczba referencyjna) w BC przypisanych agregatów lub w oddzielnym BC, powiedzmy, odpowiedzialnym za utworzenie powiązania między samochodem a kierowcą. Jeśli zrobisz to pierwsze, możesz zezwolić na (prawidłowe) operacje usuwania wydane dla samochodu lub kierowcy BC; jeśli zrobisz to drugie, będziesz musiał zapobiec usunięciu z BC samochodu i kierowcy, a zamiast tego wysłać je za pomocą harmonogramu skojarzenia samochodu i kierowcy.
Możesz również podzielić niektóre obowiązki związane z alokacją na BC w następujący sposób. Zarówno samochód, jak i kierowca zapewniają schemat „alokacji”, który zatwierdza i ustawia przydzielone wartości logiczne dla tego BC; gdy ich wartość logiczna przydziału jest ustawiona, BC zapobiega usuwaniu odpowiednich encji. (A system jest skonfigurowany w taki sposób, że BC samochodu i kierowcy zezwala tylko na przydział i dezalokację z harmonogramu BC skojarzenia samochodu / kierowcy)
Planowanie samochodu i kierowcy BC następnie utrzymuje kalendarz kierowców związanych z samochodem przez pewien czas / czas, teraz i w przyszłości, i powiadamia inne BC o zwolnieniu tylko przy ostatnim użyciu zaplanowanego samochodu lub kierowcy.
Jako bardziej radykalne rozwiązanie, możesz potraktować samochody BC i kierowców jako fabryki dołączające tylko historyczne dane, pozostawiając prawo własności do harmonogramu stowarzyszenia samochodów / kierowców. Samochód BC może wygenerować nowy samochód, wraz ze wszystkimi szczegółami samochodu, wraz z jego VIN. Właścicielem samochodu zajmuje się planista stowarzyszenia samochodów / kierowców. Nawet jeśli powiązanie samochód / kierowca zostanie usunięte, a sam samochód zostanie zniszczony, zapisy samochodu nadal istnieją w BC samochodu z definicji, a my możemy użyć BC samochodu do wyszukiwania danych historycznych; podczas gdy powiązania / własności samochodów / kierowców (przeszłość, teraźniejszość i potencjalnie przyszłość) są obsługiwane przez inny BC.
Driver.delete
nie powinno istnieć. Tak naprawdę nigdy nie widziałem domeny, w której agregaty ulegają zniszczeniu. Trzymając AR wokół siebie, nigdy nie skończysz z sierotami.