Tôi đã vấp phải một vấn đề thiết kế cơ sở dữ liệu nằm ngoài liên minh của mình, và chuyên gia về DBA của tôi đã tắt máy khoan.
Về bản chất, tôi có một bảng với khóa chính sau (PK cho ngắn gọn):
child_id integer
parent_id integer
date datetime
child_id
và parent_id
là khóa ngoại cho bảng thực thể. Bản thân bảng "con" cũng chứa một khóa ngoại đối với bảng "cha mẹ" và lo, mỗi bảng child_id
luôn tham chiếu giống parent_id
như dự kiến của bảng trên. Trong thực tế, hóa ra có một số mã bổ sung giữ cho cả hai đồng bộ.
Điều này làm cho người mới bình thường hóa quá nhiệt tình này nói rằng "Tôi nên loại bỏ sự dư thừa thay vào đó!"
Tôi phân hủy như sau:
Table_1 PK:
child_id integer
date datetime
Table_2 PK:
parent_id integer
date datetime
Table_3: (already exists)
child_id integer PRIMARY KEY
parent_id integer FOREIGN KEY
Và lo, khi tôi tham gia cùng những người này theo cách tự nhiên, tôi phục hồi bảng ban đầu. Chính sự hiểu biết của tôi đã tạo nên 5NF này.
Tuy nhiên, bây giờ tôi nhận ra có một quy tắc kinh doanh ẩn.
Thông thường, các ngày được liên kết với một ngày nhất định child_id
phải là tập hợp con của các ngày được liên kết với tương ứng parent_id
. Bạn có thể thấy rằng bảng đầu tiên thực thi quy tắc này.
Sự phân tách của tôi không thực thi quy tắc, bởi vì bạn có thể tự do thêm vào Bảng 1 cho đến khi ngày quá lớn.
Điều này dẫn tôi đến đây, với các câu hỏi sau:
Đây có phải là sự phân hủy 5NF? Mặc dù tôi nói rằng nó cho phép chèn dị thường, nhưng dường như nó cũng tuân theo ví dụ Wiki, chính nó tuân theo hướng dẫn này . Cụm từ (nhấn mạnh của tôi) "chúng tôi có thể tái tạo lại tất cả các sự kiện thực tế từ một hình thức chuẩn hóa bao gồm ba loại hồ sơ riêng biệt" mang lại cho tôi sự tạm dừng đặc biệt, vì cho dù tôi có bơm bao nhiêu rác
Table_1
, thì sự tham gia tự nhiên vẫn bỏ qua nó.Giả sử tôi không thích sự phân rã này (tôi không). Tôi tự do thừa nhận rằng giải pháp thực tế là rời khỏi bảng và mã như hiện tại. Nhưng, về mặt lý thuyết, có cách nào để phân tách và / hoặc thêm các ràng buộc để tôi thoát khỏi bảng đầu tiên và duy trì các quy tắc kinh doanh của mình không?