Câu hỏi này đã xuất hiện một vài lần trong các diễn đàn khác nhau trong tìm kiếm của tôi, nhưng không có bảng nào cung cấp độ phân giải ngắn gọn.Bảng cơ sở dữ liệu, một bảng tham chiếu nhiều bảng không liên quan
Nếu tôi có các bảng sau:
User
+- id
+- username
+- password
Article
+- id
+- title
+- content
và tôi muốn tham gia cùng họ để xác định người đã tạo ra những gì bài báo, tôi chỉ đơn giản có thể thêm cột user_id để Điều để sử dụng như một tài liệu tham khảo. Ngoài ra, tôi sẽ thêm một bảng trung gian để hiển thị ai/khi nào/cái gì, ví dụ:
User
+- ...
Article
+- ...
ChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
Bây giờ điều này là tốt, nhưng hệ thống tôi đang làm việc cần phải năng động hơn nhiều, trong đó mô-đun có thể dễ dàng được giới thiệu và tích hợp. Vì vậy, bây giờ nếu tôi thêm một phương tiện bảng tôi cần phải chia ChangeHistory giữa Điều và Truyền thông có:
User
+- ...
Article
+- ...
Media
+- id
+- title
+- path
ArticleChangeHistory
+- id
+- article_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
MediaChangeHistory
+- id
+- media_id
+- user_id
+- type [enum(insert, update, delete)]
+- datetime
này có thể thoát khỏi tay một cách nhanh chóng với sự ra đời của nhiều mô-đun. Mỗi mô-đun sẽ cần phải chịu trách nhiệm về việc tạo và quản lý riêng bảng ChangeHistory của riêng nó.
TL; DR: Tôi có thể khám phá những phương pháp nào để tạo bảng trung gian có thể nhận tham chiếu đến nhiều bảng không liên quan khác? Tôi có thể thêm một trường * record_type *, giữ tên của bảng mà bản ghi đó thuộc về, nhưng đó là xấu. Tôi sẽ cần một thứ gì đó như "ID bảng " để tham chiếu bảng mà từ đó nó đến. Bằng cách đó, khi/nếu các mô-đun được thêm vào hoặc bị loại bỏ, mô hình không bị phân tách.
Bất kỳ ý tưởng nào? Cảm ơn rất nhiều trước.
Có một số lý do khiến bạn coi "ID bảng" phải tốt hơn "record_type" không? –