2

我在Postgresql中設計了一個數據庫。我想知道使用繼承有什麼優點和缺點。在數據庫中使用繼承有什麼優點和缺點

我也想了解以下內容:

  1. 對數據庫性能的影響(即插入,更新,刪除,索引等)?

  2. 父/子是否意味着重複輸入[內部]?

  3. 它在Postgresql數據庫中常用嗎?

  4. 除了易用性之外,它怎麼比使用FK更好?

  5. 它應該與合理使用來存儲整個數據庫中使用的通用的和重複的屬性(如ID,姓名,時間戳等)對數據庫性能

+0

你是指在你的表和應用程序代碼中的對象之間的繼承之間使用關係? – 2011-04-28 05:26:09

+0

@Satadru:PostgreSQL支持數據庫中的[表繼承](http://www.postgresql.org/docs/9.0/interactive/ddl-inherit.html)。 – 2011-04-28 05:29:11

+0

@mu很好的信息 – 2011-04-28 05:34:34

回答

2

效應(即 插入,更新,刪除,索引等)?

沒有太大的影響,因爲其他技術達到相同的結果也會影響性能。

父母/孩子是否意味着重複輸入 [內部]?

您的意思是重複的數據?

是否在Postgresql 數據庫中常用?

不是我知道的,而是公平的,並不那麼多。

如何比使用FK其他 好過易用性? 它的有用性應根據具體情況確定。我個人只用它來分區表。當其他事情變得困難時,易用性可能會造成欺騙。實例的約束不作爲整體應用於父表和子表,但僅適用於它們在其上定義的表,因此唯一的約束可能無法達到您想要的效果。

它是否應合理使用習慣了,在整個 使用的數據庫 店通用和重複 屬性(如ID,姓名,時間 郵票等)

我不認爲是個好主意。繼承關係應該是有意義的,如果它只是用來爲你節省一點工作,現在它只會讓你和其他人感到困惑。

我個人並沒有使用表繼承,除非它解決了一個真正的問題。在關係模型中還有其他一些方法可以將類層次結構映射到對許多用例來說效果更好或同樣出色的表格。

+0

我不得不同意你的看法,它會混淆其他用戶以及其他框架(特別是Django)。 – Tahir 2011-04-28 14:06:37

1

我已經成功地使用了表繼承,但僅用於許多表所需的常見屬性,而不是用於「類」繼承。

事情是這樣的:

CREATE TABLE base (
    uuid UUID NOT NULL DEFAULT uuid_generate_v4(), 
    name VARCHAR(320) NOT NULL, 
    updated_by UUID NOT NULL DEFAULT uuid_nil(), 
    updated TIMESTAMP NOT NULL DEFAULT current_timestamp 
); 

CREATE TABLE child (
    childata TEXT NOT NULL DEFAULT '', 
) 
INHERITS (base); 

當我用base來容納多個表所需的數據。請注意,我實際上並沒有將任何東西放入基表(通過撤消所有權限執行)。每個子表都存儲自己的uuid,名稱等。這種方法實際上只是保存了複製/粘貼。這可能不是一個巨大的節省,因爲每個子表仍然需要PK,分別定義索引FKs &。

這樣做的不足之處在於,您無法在所有沒有聯合的表上執行name查詢。如果你正在嘗試做類繼承,這可能是一個要求。

類似員工子類的人可能會更好地模擬爲具有共同數據的人員表和具有「子類」數據的員工表,該表具有與人員的1對1鏈接。這應該會很好,因爲你會加入PK。搜索將查詢人員表格,然後您可以爲員工數據執行外部聯接(使用NULL來暗示人員與員工)。

0

具有取入的片教程畝的簡要回顧一下後指向,

「對數據庫性能的影響(即插入,更新,刪除,索引等)?」

性能考慮可能是爲什麼構造發明的原因。

「父母/孩子是否意味着重複輸入[內部]?」

大概沒有。看起來更像是內部實現將基於諸如ROWID()之類的東西。如果我不得不實施這樣的功能,我會這麼做,我懷疑任何DBMS工程師會有不同的想法。

「除了易用性之外,它怎麼比使用FK更好?」

我會遠離它,並使用「正確」的設計與FKs。 「易用性」可能是這種繼承技術的一種質量,只有在表面上看,它才存在。我預計會有許多令人不愉快的驚喜潛伏在表面之下,比如本教程末尾記錄的少數意外。就我所知,關鍵聲明仍然允許重複行的那個對我來說只是一個殺手。我的意思是,允許重複的鍵,你能得到多麼瘋狂?

另外一個原因是我不確定這是否是標準的SQL。

「應該說,它是在使用的理由......」

如果鍵的獨特性不再聲明,我不知道的唯一的事情是所有的原因已經一去不復返了。

相關問題