Mysql

在 MySQL Workbench 圖中表示超類/子類(或超類型-子類型)關係

  • June 2, 2016

情況

我試圖弄清楚如何在通過MySQL Workbench創建的那種實體關係圖 (ERD) 中表示關於超類/子類超類型子類型結構的一對一 (1:1) 關係(如您所知,它看起來比原始的 PP Chen 圖更接近具體的 SQL 實現)。

我是新手,所以我不確定是否必須在子類實體(或subtypes )中再次輸入所有屬性1,即and ,或者我是否有一種連接和獲取屬性的方法超(或超類型),以便更清楚地說明它們之間的關係,我猜是外鍵。MANAGER``DRIVER

  1. 中的每個屬性都EMPLOYEE適用於MANAGERand DRIVER,但MANAGERandDRIVER會有一些額外的屬性,這些屬性不是EMPLOYEE實體類型(或表,一旦實現)的特徵。

目前圖表

Bellow 是我迄今為止創建的 ERD:

圖表

那麼,我怎樣才能在我的圖表中準確地表示這種關係呢?

這是 ER 術語中所謂的“泛化/專業化”的一個案例。正如您所做的那樣,這與對像模型所稱的“超類/子類”實際上是一回事。有兩個可分離的問題。第一個是你想怎麼畫圖,第二個是你想怎麼設計表格。

就繪製圖表而言,我會以與您相同的方式繪製它,但有一個例外。從經理和司機引出的線路不會分開到員工。相反,他們會使用我稱之為 gen/spec 框的東西。以下範例顯示了一種描述 gen/spec 案例的方法。然後單行將 gen/spec 框與員工表連接起來。這完全取決於哪種方式對您和其他查看圖表的人來說似乎更簡單、更清晰。

就表格而言,您可以擁有三個表格,正如您所展示的那樣。這有時稱為“類表繼承”。有一種您可以從中受益的技術,稱為“共享主鍵”。在這種技術中,manager 表和 driver 表沒有自己的 id 欄位。相反,在每個子類表中都有一個Employee_id 的副本,並且將employee_id 聲明為該表的主鍵和引用Employees 的外鍵。

使用共享主鍵可以為您購買一些東西,但也會讓您付出一些代價。

它可以讓您執行經理-僱員或司機-僱員的 1:1 限制。它最終可能會加速生成的連接。它還允許使用員工 ID 作為外鍵的第四個表直接連接到 Drivers 或 Managers。不相關的員工退出加入。

每次插入司機或經理時,您都必須獲取並使用正確的employee_id 副本。

您還可以將驅動程序屬性和經理屬性打包到員工表中,將不相關的欄位保留為 NULL。這導致更少的連接,但它確實有一個缺點。它使員工表稍微更大和更慢。如果在 WHERE 子句中使用可為空的欄位,則必須了解 SQL 如何處理三值邏輯(True、False 和 Unknown)。對於一些人來說,這是非常難以掌握的。我自己盡量避免三值邏輯。

引用自:https://dba.stackexchange.com/questions/120176