Cách bạn đặt câu hỏi (và đề xuất hai phương án) như thể mối quan tâm duy nhất là driverId vẫn còn hiệu lực tại thời điểm xe được tạo.
Tuy nhiên, bạn cũng phải lo ngại rằng trình điều khiển được liên kết với trình điều khiểnId không bị xóa trước khi xe bị xóa hoặc được cấp cho một trình điều khiển khác (và cũng có thể tài xế không được chỉ định cho một chiếc xe khác (điều này nếu tên miền chỉ giới hạn tài xế được liên kết với một chiếc xe)).
Tôi đề nghị thay vì xác nhận, bạn phân bổ (sẽ bao gồm xác nhận sự hiện diện). Sau đó, bạn sẽ không cho phép xóa trong khi vẫn được phân bổ, do đó bảo vệ chống lại tình trạng chạy đua của dữ liệu cũ trong quá trình xây dựng, cũng như các vấn đề dài hạn khác. (Lưu ý rằng phân bổ cả xác nhận hợp lệ và nhãn hiệu được phân bổ và hoạt động nguyên tử.)
Btw, tôi đồng ý với @priceJones rằng sự liên kết giữa xe và tài xế có lẽ là trách nhiệm tách biệt với xe hoặc tài xế. Loại liên kết này sẽ chỉ phát triển phức tạp theo thời gian, bởi vì nó có vẻ giống như một vấn đề lập lịch trình (trình điều khiển, xe hơi, khe thời gian / cửa sổ, thay thế, vv ...) Ngay cả khi nó giống như một vấn đề đăng ký, người ta có thể muốn lịch sử đăng ký cũng như đăng ký hiện tại. Vì vậy, nó rất có thể xứng đáng với BC của mình hoàn toàn.
Bạn có thể cung cấp một sơ đồ phân bổ (chẳng hạn như số boolean hoặc số tham chiếu) trong BC của các thực thể tổng hợp được phân bổ, hoặc trong một BC riêng biệt, giả sử, người chịu trách nhiệm tạo liên kết giữa xe và tài xế. Nếu bạn thực hiện trước đây, bạn có thể cho phép (hợp lệ) các hoạt động xóa được cấp cho xe hoặc tài xế BC; nếu bạn làm sau, bạn sẽ cần ngăn chặn việc xóa khỏi xe & tài xế BC và thay vào đó hãy gửi cho họ thông qua lịch trình liên kết lái xe và tài xế.
Bạn cũng có thể phân chia một số trách nhiệm phân bổ giữa các BC như sau. Mỗi chiếc xe và tài xế BC đều cung cấp sơ đồ "phân bổ" để xác nhận và thiết lập boolean được phân bổ với BC đó; khi boolean phân bổ của chúng được đặt, BC ngăn chặn xóa các thực thể tương ứng. (Và hệ thống được thiết lập sao cho xe & tài xế BC chỉ cho phép phân bổ và phân bổ từ lịch trình liên kết xe / tài xế BC.)
Sau đó, xe và tài xế lên lịch BC duy trì lịch trình của các tài xế liên quan đến xe trong một khoảng thời gian / thời gian, hiện tại và tương lai, và thông báo cho các BC khác về việc phân bổ chỉ trong lần sử dụng cuối cùng của xe hoặc tài xế theo lịch trình.
Là một giải pháp căn cơ hơn, bạn có thể coi xe hơi & tài xế BC là những nhà máy ghi lại lịch sử chỉ nối thêm, để lại quyền sở hữu cho người lập lịch trình hiệp hội xe / lái xe. Chiếc xe BC có thể tạo ra một chiếc xe mới, hoàn chỉnh với tất cả các chi tiết của chiếc xe, cùng với số VIN của nó. Quyền sở hữu của chiếc xe được xử lý bởi lịch trình hiệp hội xe / lái xe. Ngay cả khi một hiệp hội xe / tài xế bị xóa và chính chiếc xe bị phá hủy, hồ sơ của chiếc xe vẫn tồn tại trong xe BC theo định nghĩa và chúng ta có thể sử dụng xe BC để tra cứu dữ liệu lịch sử; trong khi các hiệp hội / chủ sở hữu xe / tài xế (quá khứ, hiện tại và có khả năng trong tương lai theo lịch trình) đang được xử lý bởi một BC khác.
Driver.delete
không nên tồn tại Tôi chưa bao giờ thực sự thấy một miền nơi tổng hợp bị phá hủy. Bằng cách giữ AR xung quanh bạn không bao giờ có thể kết thúc với trẻ mồ côi.