2013-02-12 50 views
5

Tôi đang sử dụng cơ sở dữ liệu MySQL. Trong mô hình dữ liệu quan hệ của tôi, tôi có hai thực thể có liên quan 1: 1 với nhau. Trong lược đồ của tôi, mối quan hệ 1: 1 được thiết lập bằng cách đặt một trường FK vào một trong hai bảng, có liên quan đến PK của bảng khác. Cả hai bảng đều có PK và cả hai đều là BIGINTs tăng tự động.Ràng buộc khóa ngoài hai chiều trong quan hệ 1: 1

Tôi tự hỏi liệu có thể có hành vi ON DELETE CASCADE đối với họ hoạt động theo cả hai cách hay không.

tức là A 1: 1 B, có nghĩa là [xóa A cũng xóa B] cũng như [xóa B cũng xóa A].

Tôi nhận thấy rằng điều này có thể không hoàn toàn cần thiết về thiết kế ứng dụng phù hợp, nhưng tôi chỉ tự hỏi liệu nó có thực sự có thể không. Theo tôi nhớ, bạn không thể đặt một ràng buộc FK trên PK.

Trả lời

8

Không thể chèn bản ghi như vậy nếu bạn có thực thi mối quan hệ 2 chiều. Gà và trứng. Không thể chèn bản ghi trong bảng # 1 vì không có bản ghi phù hợp trong bảng # 2 và bảng # 2 không thể được chèn vào vì không có gì trong bảng # 1 để móc vào.

Bạn có thể tắt tạm thời các ràng buộc FK (set foreign_key_checks = 0), nhưng điều này không bao giờ được thực hiện trong hệ thống "thực". Nó được dự định nhiều hơn để tải các bãi chứa thứ tự tải bảng không thể được đảm bảo.

+0

+1 cho đối số 'gà hoặc trứng'. ;-D – SparKot

+1

@DoSparKot: câu trả lời thông thường của tôi cho "điều gì đến trước?" câu hỏi là "con gà trống": p –

+0

Hmm, đó là điểm hợp lệ mà tôi chưa từng nghĩ đến. Bên cạnh đó, chỉ có ý nghĩ có ràng buộc không thành công khi chèn, vì giá trị của trường tự động tăng lên đã khiến tôi buồn nôn. (P.S. Con gà trống là con đực. Không phải là một cuộc chiến công bằng.) –

Các vấn đề liên quan