Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô hình cơ sở dữ liệu cho một thực thể yếu

Một thực thể không yếu vì nó không thể tồn tại độc lập mà vì nó không thể được xác định một cách độc lập. Do đó, một mối quan hệ “dẫn dắt” đến một thực thể yếu được gọi là mối quan hệ “xác định”. Trên thực tế, điều này có nghĩa là khóa chính của cha mẹ được di chuyển vào (thường là thích hợp ) tập con PK của trẻ (thuật ngữ "thực thể yếu" thường được định nghĩa liên quan đến khóa chính, mặc dù về lý thuyết nó có thể áp dụng cho bất kỳ khóa nào).

Hoàn toàn hợp pháp khi có một thực thể không thể tồn tại độc lập, nhưng có thể được xác định một cách độc lập - nói cách khác, thực thể đó có mối quan hệ không xác định với một thực thể không phải NULL.

Bạn phải hỏi:can historyLineID là duy nhất một mình hoặc kết hợp với orderID ? Tôi nghi ngờ trường hợp sau là trường hợp này, điều này sẽ khiến nó trở thành một thực thể yếu.

Những gì bạn đã cho chúng tôi thấy không phải là một thực thể yếu - PK của cha mẹ không được chuyển sang PK của trẻ.

Về cơ bản, bạn có hai tùy chọn:

  • orderHistory có PK tổng hợp:{orderID, historyLineID} , trong đó orderID là FK. BTW, PK này có thể được coi là "tự nhiên":

  • orderHistory có PK đại diện:{orderHistoryID} , trong khi orderID nằm ngoài PK. Bạn vẫn cần có khóa thay thế {orderID, historyLineID} mặc dù:

Có, đây là tùy chọn đầu tiên được mô tả ở trên. Trừ khi bạn có các mối quan hệ con trên orderHistory bản thân nó, đây cũng là giải pháp tốt nhất. Nếu orderHistory có con, hơn thế điều này có thể là giải pháp tốt nhất hoặc có thể không phải là giải pháp tốt nhất, tùy thuộc vào một số yếu tố.

Đây không phải là-hoặc. Một trường có thể vừa là FK vừa là một phần của khóa (chính hoặc thay thế), như được hiển thị ở trên.

Bạn sẽ không thể tiếp cận 3NF trừ khi bạn chỉ định chính xác các khóa của mình và bạn sẽ không thể làm điều đó nếu không xem xét thực thể nào có thể được nhận dạng độc lập và thực thể nào không thể.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1114 (HY000):Bảng đã đầy

  2. Làm cách nào để tạo người dùng MySQL chỉ đọc?

  3. Nhiều truy vấn MYSQL so với nhiều vòng lặp foreach php

  4. Khi nào thì thêm chỉ mục trên trường bảng SQL (MySQL)?

  5. Lỗi kết nối JDBC:múi giờ không được công nhận