2012-06-19 46 views

Trả lời

0

Không có quy tắc nghiêm ngặt nào sẽ xác định vai trò của một bảng trong mối quan hệ. Thực tế, đó là vẻ đẹp và sự đổi mới của mô hình quan hệ: không có phân cấp.

Thông thường, nếu có sự phụ thuộc khó khăn từ bảng này sang bảng khác, vai trò của trẻ em hoặc cha mẹ được xác định bằng ngữ nghĩa của các bảng. Ví dụ: trong quan hệ order, order_details, hiển nhiên là order là phụ huynh và order_details là đứa trẻ.

Trong các trường hợp khác, không rõ ràng vai trò của mối quan hệ trong mối quan hệ. Ví dụ: orderscustomers mối quan hệ. Nếu bạn thực hiện truy vấn để nhận tất cả orders thuộc một số customer nhất định thì cha mẹ có thể là customersorders là trẻ em. Nhưng bạn cũng có thể thực hiện truy vấn để nhận tất cả thông tin lô hàng (được lưu trữ trong quan hệ customers) cho order cụ thể và trong trường hợp này, bạn có thể cho rằng order là phụ huynh trong khi customers là trẻ trong truy vấn này. Như tôi đã nói trước đây, khi mô hình quan hệ được phát minh vào cuối những năm 70, một trong những lợi ích chính của nó trên một mô hình trị vì (mô hình dữ liệu phân cấp) là khả năng tìm kiếm dữ liệu liên quan bất kể phụ thuộc của chúng.

+0

Làm thế nào về mối quan hệ 'người'' quốc gia? Tôi đoán người đó là bảng cha ở đây. Trong mối quan hệ này sẽ là một danh sách những người và một danh sách các quốc gia. Mỗi người được yêu cầu phải có một quốc gia (xác định mối quan hệ) tuy nhiên trong tài liệu MySQL nó nói 'Một mối quan hệ xác định là mối quan hệ mà bảng con không thể được xác định duy nhất mà không có cha mẹ của nó.' có nghĩa là bảng cha sẽ là 'country' và bảng con là 'người' hoàn toàn ngược lại với những gì tôi mong đợi ... –

+0

@Jackobud: không nhất thiết. Nó phụ thuộc vào những gì bạn đang tìm kiếm (truy vấn của bạn). Trong ngữ cảnh đó 'một nơi mà bảng con không thể được xác định duy nhất mà không có cha mẹ của nó') không phải bảng' country' và 'người' là con trong mối quan hệ. Trong trường hợp đó, tài liệu của MySQL đề cập đến một sự phụ thuộc đầy đủ: nghĩa là 'order_details' không thể tồn tại nếu không có' đơn hàng' tương ứng của chúng. –

+0

Hmmm, ví dụ của tôi là mối quan hệ xác định hoặc không xác định? –

0

Một định nghĩa vĩ đại được đề xuất here:

Một mối quan hệ xác định là khi sự tồn tại của một hàng trong một bảng con phụ thuộc vào một hàng trong một bảng cha. (...) Chính thức, cách "đúng" để thực hiện việc này là tạo khóa ngoài [tức là khóa chính của phụ huynh] một phần của khóa chính của trẻ.

9

Một bảng con (AKA weak entity) là một bảng có khóa chính thuộc tính phụ thuộc trên bảng khác, do đó bảng con được xác định hoặc xác định một phần bởi hàng trong bảng nó phụ thuộc vào (cha mẹ). Các hàng trong một bảng con không thể tồn tại mà không có một hàng tương ứng trong bảng cha của nó.

Để minh họa, hãy lấy một ví dụ đơn giản và hoàn toàn có liên quan mà chúng ta đều quen thuộc: Cha mẹ và trẻ em trong ngữ cảnh của gia đình. Chúng ta có thể mô hình ra mối quan hệ này với các bảng như sau:

Parent to Child Identifying Relationship

Trong mô hình trên, mỗi hàng trong bảng Parentsduy nhất xác định bởi một SSN.SSN là một thuộc tính nội tại và duy nhất cho mỗi phụ huynh, do đó nó là một thực thể độc lập hoặc "mạnh" bởi vì nó không dựa vào một bảng khác để xác định danh tính của nó.

trẻ em tuy nhiên, đòi hỏi cha mẹ để tồn tại (Parent_SSNphải tham chiếu đến một hiện SSN trong bảng Parents).

Lưu ý khóa chính kết hợp (Parent_SSN, Name) trong bảng Children. Điều này có nghĩa rằng trẻ em là xác định duy nhất bởi kết hợp của Parent_SSNName. Bạn không thể truy vấn cho một cá nhân chỉ dựa trên trường Name vì nhiều cha mẹ có thể có con có cùng tên. Tương tự, bạn không thể truy vấn cho một cá nhân chỉ dựa trên trường Parent_SSN vì một phụ huynh có thể có nhiều con. Cân nhắc điều đó, trẻ em được cha mẹ xác định một phần, do đó, xác định mối quan hệ.

Nhưng trẻ em cũng không thể nhận dạng duy nhất bởi SSN? Tại sao có, chắc chắn. Chúng ta hãy đi trước và điều chỉnh mô hình của chúng tôi bao gồm rằng:

Parent to Child Non-Identifying Relationship

Trong phiên bản này của mô hình, thông báo, chúng tôi đã giới thiệu các lĩnh vực SSN cho Children. danh tính duy nhất của trẻ em hiện được xác định bởi chính nội bộ và độc đáo của chúng SSN. Danh tính của họ không còn phụ thuộc vào trên bảng Parents. Mặc dù lĩnh vực Parent_SSN vẫn tham chiếu SSN của bảng Parents, nó không có phần trong bản sắc độc đáo của đứa trẻ, vì vậy các bậc cha mẹ có một không xác định mối quan hệ với con cái của họ, và cả hai bảng bây giờ có thể được xem xét các thực thể độc lập "mạnh".

Là một sang một bên, phiên bản này của mô hình có một vài ưu điểm so với người đầu tiên:

  • Một bây giờ phụ huynh có thể có hai hay nhiều trẻ em có cùng tên, trong khi entity integrity hạn chế trong mô hình trước đó sẽ không cho phép điều này.
  • Bạn có thể cho phép trường Parent_SSN chứa NULL để giải thích cho sự kiện bạn có dữ liệu về trẻ, nhưng không biết ai là cha mẹ của trẻ.

Trong cả hai mô hình trên, bảng Parents được coi là bảng cha của bảng Children.Tuy nhiên, trong không xác định mối quan hệ như trong mô hình thứ hai, Parents chỉ là một bảng cha trong bối cảnh của nước ngoài chủ chốt Parent_SSNParent_SSN tài liệu tham khảo /phụ thuộc trên SSN trong bảng Parents, nhưng không có bất kỳ một phần trong việc xác định danh tính thực sự của trẻ em.

Để minh họa tại sao bối cảnh là rất quan trọng khi quyết định bảng được cha mẹ bảng/con, hãy xem xét ví dụ sau đây liên quan đến một phụ thuộc vòng tròn:

Employee Department Relationships

Trong ví dụ này, người lao động và các bộ phận được xác định duy nhất bởi họ thuộc tính riêng và không lấy được bất kỳ phần nào của bản sắc của chúng từ các bảng khác.

Ở đây, chúng ta có hai mối quan hệ không xác định: một nhân viên làm việc cho một bộ phận (DeptNo trong bảng Employee), và một bộ phận được quản lý bởi một nhân viên (ManagerSSN trong bảng Department). Cái nào là bảng cha? ... Bàn trẻ em?

Điều đó tùy thuộc vào ngữ cảnh - bạn đang nói về mối quan hệ chính nào của nước ngoài? Bảng Bộ sẽ được coi là bảng cha trong bối cảnh DeptNo trong bảng EmployeeDeptNotham chiếu/phụ thuộc trên bảng Department.

Tuy nhiên, bảng Employee sẽ được coi là bảng cha trong bối cảnh ManagerSSN trong bảng DepartmentManagerSSNtham khảo/phụ thuộc trên bàn Employee.

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