Tôi đã gặp phải tình huống này nhiều lần trong các dự án khác nhau gần đây. Dưới đây là một sơ đồ của bốn bảng, dán nhãn với các chữ cái:Bốn thiết kế mối quan hệ bảng
A
1/\ 1
/ \
*/ \ *
B C
1 \ /1
\ /
* \/*
D
Trong kịch bản này, nó có thể cho các dữ liệu trở nên không phù hợp nếu các phím B
-A
và C
-A
không phù hợp cho một được cung cấp D
.
Đối với một cụ thể (tạo thành) Ví dụ, hãy tưởng tượng A
là Company
, B
là Employee
, C
là Project
, và D
là WorkItem
. Trong trường hợp này, không có gì ngăn cản một mục công việc được tạo ra mà tuyên bố được gán cho một người thậm chí không làm việc cho công ty sở hữu dự án.
Tôi chủ yếu chỉ tò mò, có một giải pháp thiết kế cho sự cố này không? Tôi biết trong các ứng dụng thực tế, điều này quan trọng bạn có thể sử dụng các bộ kích hoạt hoặc một số biện pháp bảo vệ khác. Tôi đã không tìm thấy một cách để thay đổi các bảng để làm cho một sự không thống nhất như vậy không thể. Là có một cách?
Lưu ý rằng chỉ cắt đứt một trong những kết nối, như C
-A
không làm việc, bởi vì nếu không có D
's tồn tại cho C
mà bạn sẽ không có cách nào truy tìm các kết nối trở lại A
.
Câu hỏi hay. Tôi đã luôn luôn đặt các biện pháp bảo vệ để ngăn chặn loại điều này trong lớp ứng dụng. Nó sẽ rất thú vị để xem những gì người khác phải nói. –
Tôi sử dụng để thực thi loại hạn chế này trong quy tắc kinh doanh, chứ không phải kích hoạt. –
Xác định lại các thực thể của bạn: nhân viên - >> người (nhớ: người thụ hưởng đã từng là nhân viên một lần) Thêm trục thời gian có thể là cần thiết (và một vài tham số phụ khác; tìm kiếm kích thước ẩn). – wildplasser