亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ER圖中的超級和子類型關系如何表示為表格?

ER圖中的超級和子類型關系如何表示為表格?

慕標5832272 2019-09-13 13:10:39
ER圖中的超級和子類型關系如何表示為表格?我正在學習如何將實體關系圖解釋為SQL DDL語句,我對符號的差異感到困惑??紤]一個不相交的關系,如下圖所示:“車輛”框連接到“IsA”三角形,標記為“不相交”,它分別連接到“2WD”框和“4WD”框。這會表示為:車輛,2WD和4WD表(2WD和4WD將指向車輛的PK); 要么只有2WD和4WD表(和沒有車輛表),這兩個表都會復制車輛所具有的任何屬性?我認為這些是寫這種關系的其他方式:“車輛”框用粗線連接到“IsA”三角形,它與細線分別連接到“2WD”框和“4WD”框。 “車輛”盒連接到“IsA”三角形,它們分別連接到“2WD”盒和“4WD”盒,全部用細線連接。我正在尋找一個明確的解釋,說明每個圖表最終會有哪些表格。
查看完整描述

3 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

ER表示法

有幾種ER符號。我不熟悉你正在使用的那個,但很明顯你試圖表示一個子類型(又名繼承,類別,子類,泛化層次......)。這是OOP繼承的關系表親。

在進行子類型分析時,您通常會關注以下設計決策:

  • 摘要與具體:父母可以實例化嗎?在你的例子中:可以Vehicle存在不是存在2WD4WD?1

  • 包容性與排他性:可以為同一個父母實例化多個孩子嗎?在你的榜樣,可以Vehicle 2WD4WD?2

  • 完整與不完整:您希望將來能夠添加更多兒童嗎?在您的示例中,您是否希望稍后可以將a BikePlane(etc ...)添加到數據庫模型中?

信息工程表示法區分包容性和排他性子類型關系。另一方面,IDEF1X表示法沒有(直接)識別這種差異,但它確實區分了完整和不完整的子類型(IE沒有)。

從下圖ERwin的方法指南(第5章,子類型關系)示出的區別:

IE和IDEF1X都不能直接指定抽象與具體父級。

物理表征

遺憾的是,實際數據庫不直接支持繼承,因此您需要將此圖轉換為實際表。這樣做通常有3種方法:

  1. 將所有類放在同一個表中,并將子字段保留為NULL。然后,您可以使用CHECK來確保非NULL中的字段的正確子集。

    • 優點:沒有加入,所以一些查詢可以受益??梢詮娭茍绦懈讣墑e的密鑰(例如,如果您想要避免不同的2WD4WD具有相同ID的車輛)??梢暂p松地強制執行包容性與獨占子項以及抽象與具體父級(僅通過改變CHECK)。

    • 缺點:有些查詢可能會變慢,因為它們必須過濾掉“不感興趣”的孩子。根據您的DBMS,特定于子項的約束可能會有問題。很多NULL都會浪費存儲空間。不太適合不完整的子類型 - 添加新子項需要更改現有表,這在生產環境中可能會有問題。

  2. 將所有子項放在單獨的表中,但沒有父表的表(而是在所有子項中重復父項的字段和約束)。具有(3)的大多數特征,同時避免JOIN,以較低的可維護性(由于所有這些字段和約束重復)和無法強制執行父級鍵或代表具體父級的代價。

  3. 將父項和子項放在單獨的表中。

    • 優點:清潔。不需要人為地重復字段/約束。實施父級鍵并輕松添加特定于子級的約束。適合不完整的子類型(相對容易添加更多的子表)。某些查詢只能通過查看“有趣的”子表來獲益。

    • 缺點:有些查詢可能很重要??赡茈y以強制執行包容性與獨占子級以及抽象與具體父級(如果DBMS支持循環延遲外鍵,則可以聲明性地強制執行,但在應用程序級別強制執行它們通常被認為是較小的惡意)。

正如您所看到的,情況并不理想 - 無論您選擇何種方法,您都需要妥協。方法(3)應該是你的出發點,如果有令人信服的理由,只選擇其中一種方案。


1我猜這是你的圖表中線條的粗細。

2我猜這是你的圖表中存在或不存在“不相交”的含義。



查看完整回答
反對 回復 2019-09-16
  • 3 回答
  • 0 關注
  • 1337 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號