Mối quan hệ tạm thời: sự khác biệt giữa việc có một bảng và có nhiều bảng là gì?


8

Hãy xem xét các mối quan hệ ternary sau: mối quan hệ ternary

Giả sử rằng tất cả các thực thể chỉ có hai thuộc tính (PK và Tên).


Dưới đây là các bảng tôi dẫn xuất (5 bảng):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------

Câu hỏi:

Nó có phải là một giải pháp tốt cho mối quan hệ ternary đó? Sự khác biệt giữa việc có 2 bảng (R1 và R2) thay vì bảng đơn sau đây:

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

Đối với tôi, có vẻ như có 2 bảng riêng biệt cho mỗi mối quan hệ (R1 và R2) là một giải pháp tốt hơn khi so sánh với việc có một bảng duy nhất, nhưng tôi không biết điều đó có thực sự đúng hay đó là một thực tiễn tốt.

Câu trả lời:


6

Hai giải pháp mô hình quy tắc khác nhau. Với bảng ternary bạn đang nói rằng một công ty chỉ có thể có một số sản phẩm nhất định trong một lĩnh vực cụ thể. Trong một lĩnh vực khác nhau, sẽ có một bộ sản phẩm khác nhau, mặc dù hai bộ có thể trùng nhau, tất nhiên.

Với các bảng nhị phân, bạn nói rằng lĩnh vực đó không ảnh hưởng đến những sản phẩm mà công ty tôi liên quan. Tương tự, công ty không có ảnh hưởng đối với những sản phẩm thuộc lĩnh vực nào.

Sự lựa chọn giữa các lựa chọn thay thế này sẽ được xác định bởi các quy tắc kinh doanh của bạn. Nó không thể được trả lời bởi một cuộc thảo luận trừu tượng, hàn lâm. Tôi đã tìm thấy tốt nhất để đặt tên mối quan hệ giữa các thực thể. Nói rằng công ty có liên quan đến sản phẩm, nói, là thú vị; nói tại sao công ty có liên quan đến sản phẩm thậm chí còn tốt hơn. "Công ty mua sản phẩm" là một thông tin khác với "công ty sản xuất sản phẩm" hoặc "công ty không có giải phóng mặt bằng bảo mật để sử dụng sản phẩm". Bằng cách này, tôi thường khám phá các mối quan hệ, thuộc tính và loại thực thể mới. Cuối cùng, bạn có thể cần cả bảng nhị phân và bảng ternary!

Chỉnh sửa : Đối với các quy tắc

  1. một công ty sản xuất nhiều sản phẩm / mỗi sản phẩm được sản xuất bởi chính xác một công ty
  2. một công ty đã báo cáo chính xác một lĩnh vực / mỗi lĩnh vực báo cáo về nhiều công ty
  3. Một sản phẩm được bán trong đúng một lĩnh vực / mỗi lĩnh vực có sẵn nhiều sản phẩm.

Tôi sẽ có những loại thực thể

Khu vực - Ngành

Công ty - CompanyID, ngànhID

Sản phẩm - ProductID, CompanyID

Nếu bất kỳ quy tắc nào của bạn là nhiều-nhiều thì bạn sẽ cần các bảng kết hợp nhị phân.

Bên cạnh đó, các tên mối quan hệ "có", "thuộc về" và "là" thường ẩn nhiều hơn những gì chúng chiếu sáng. Nếu bạn tìm thấy BA của mình bằng cách sử dụng chúng, hãy yêu cầu họ có suy nghĩ khác.


Giả sử các quy tắc kinh doanh là: 1) Các công ty sản xuất sản phẩm; 2) Các công ty thuộc về một lĩnh vực (ví dụ về lĩnh vực: máy móc, thực phẩm, phần mềm); 3) Sản phẩm thuộc về ngành. Tôi đã cố gắng súc tích và trả giá cho việc che giấu thông tin quan trọng. Cảm ơn bạn!
feelthhis

Nhận xét của tôi đặt ra một câu hỏi khác: ERD ở trên mô hình kinh doanh nào? Có cách nào để làm cho ERD rất chính xác về các quy tắc kinh doanh không? Bảng ternary thể hiện chính xác ERD ở trên? Nếu vậy, thì ERD ở trên là mô hình sai liên quan đến 3 quy tắc kinh doanh đã nêu, phải không?
feelthhis

Những quy tắc kinh doanh nào thực hiện mô hình ERD ở trên: bảng ternary có nghĩa là có một thứ có ProductID, sectorID và CustomerID là khóa cần thiết và đủ. Một cái gì đó như "GE (công ty) tài chính (Sản phẩm) 90% (thuộc tính) của tất cả các động cơ aero (ngành)" trong khi "Goldman tài trợ 5% cho động cơ aero" và "GE tài trợ 3% cho cối xay gió".
Michael Green

@feelthhis - "Có cách nào để làm cho ERD rất chính xác về các quy tắc kinh doanh": có! Đó là những gì ERD làm. Tôi sẽ chỉnh sửa câu trả lời của tôi. "Bảng ternary có đại diện chính xác cho ERD ở trên không": Tôi nghĩ bạn có nghĩa là "quy tắc ở trên". Không. Một sản phẩm được sản xuất bởi chính xác một công ty. Một công ty thuộc chính xác một lĩnh vực. Khi biết ProductID, người ta có thể xác định duy nhất khách hàng và khu vực và những IDss này sẽ là dự phòng trong bảng ternary. Do đó, nó không được chuẩn hóa theo 3 quy tắc của bạn. "Nếu vậy ..": Tôi đồng ý.
Michael Green

Ternary Table: a company may...Sử dụng ký hiệu (IDSector, IDCompany, ID sản phẩm), điều đó có nghĩa là các bộ dữ liệu (1, 1, 1) và (1, 1, 2) được cho phép ("c1" tạo ra "p1" và "p2" trong "s1" ); và các tuples (1, 1, 1) và (2, 1, 2) không được phép ("c1" tạo ra "p1" trong "s1" và tạo ra "p2" trong "s2")? Tại sao? Bảng ternary có nên cho phép bất kỳ bộ dữ liệu nào có thể (IDSector, IDCompany, ID sản phẩm) không? Binary Tables: sector has...; company has...Tôi mặc dù rằng bảng ternary tương đương với các nhị phân, nếu bảng ternary cho phép bất kỳ bộ dữ liệu nào (IDSector, IDCompany, ID sản phẩm).
feelthhis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.