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

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

如何在數據庫中表示繼承?

如何在數據庫中表示繼承?

溫溫醬 2019-05-29 15:57:14
如何在數據庫中表示繼承?我正在考慮如何在SQL Server數據庫中表示復雜的結構。考慮一個需要存儲一系列對象細節的應用程序,這些對象共享一些屬性,但有許多其他屬性不常見。例如,商業保險計劃可能包括同一保單內的責任,汽車,財產和賠償保險。在C#等中實現它是微不足道的,因為您可以創建一個帶有Sections集合的Policy,其中Section是根據各種類型的封面所需繼承的。但是,關系數據庫似乎不容易這樣做。我可以看到有兩個主要選擇:為所有可能的變體創建一個Policy表,然后是一個Sections表,其中包含所需的所有字段,其中大部分都是null。創建一個Policy表和許多Section表,每個表對應一種封面。這兩種替代方案似乎都不令人滿意,特別是因為必須在所有Sections中編寫查詢,這將涉及大量連接或大量空檢查。這種情況的最佳做法是什么?
查看完整描述

4 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

第三個選項是創建一個“Policy”表,然后是一個“SectionsMain”表,它存儲所有部分類型中共同的所有字段。然后為每種類型的部分創建其他表,這些表只包含不常見的字段。

確定哪個最佳取決于您擁有的字段數以及編寫SQL的方式。他們都會工作。如果你只有幾個領域,那么我可能會選擇#1。對于“很多”的領域,我會傾向于#2或#3。


查看完整回答
反對 回復 2019-05-29
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

根據提供的信息,我將對數據庫建模以具有以下內容:

政策

  • POLICY_ID(主鍵)

負債

  • LIABILITY_ID(主鍵)

  • POLICY_ID(外鍵)

性能

  • PROPERTY_ID(主鍵)

  • POLICY_ID(外鍵)

......依此類推,因為我希望政策的每個部分都有不同的屬性。否則,可能會有一個SECTIONS表,除此之外policy_id,還有section_type_code...

無論哪種方式,這將允許您支持每個策略的可選部分......

我不明白你對這種方法的不滿意 - 這是你在保持參照完整性而不是復制數據的同時存儲數據的方式。這個詞是“標準化的”......

因為SQL是基于SET的,所以它對于程序/ OO編程概念來說相當陌生,并且需要代碼從一個領域轉換到另一個領域。通常會考慮ORM,但它們在大批量復雜系統中不能很好地工作。


查看完整回答
反對 回復 2019-05-29
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

另一種方法是使用INHERITS組件。例如:

CREATE TABLE person (
    id int ,
    name varchar(20),
    CONSTRAINT pessoa_pkey PRIMARY KEY (id));CREATE TABLE natural_person (
    social_security_number varchar(11),
    CONSTRAINT pessoaf_pkey PRIMARY KEY (id)) INHERITS (person);CREATE TABLE juridical_person (
    tin_number varchar(14),
    CONSTRAINT pessoaj_pkey PRIMARY KEY (id)) INHERITS (person);

因此,可以在表之間定義繼承。


查看完整回答
反對 回復 2019-05-29
  • 4 回答
  • 0 關注
  • 1125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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