2010-05-13 121 views
9

對於有經驗的人在PostgreSQL中使用繼承:是否值得使用它,或者最好不要使用它?你會在哪種情況下使用它?在PostgreSQL中使用繼承

說實話,我不完全理解他們的關係和麪向對象模型之間的區別...

+6

@ Dr.PersonPersonII先生們!我不介意當你編輯我的帖子時要清楚,但不要在你改變意思的時候。在我看來:「對於混合關係模型和麪向對象模型,我有點懷疑......」_和_「我不完全理解關係模型和麪向對象模型之間的區別」,這些東西太不同了!如果你能恢復我的話,會很好!謝謝。 – 2011-06-22 22:21:24

+0

Prokofviev。我沒有打算改變你的意思,我也沒有看到你所談論的那種劈頭髮的區別。鑑於你原來的帖子中極度缺乏語法(我認爲我是在幫助非母語的人),我不相信你認爲我已經破壞了你的歪曲問題和你回覆的憤怒語氣。你只需要5秒鐘就可以解決「問題」,並且一切都會很好。你可以自己改變編輯!我不打擾。 – 2011-06-23 09:27:55

+2

沒有什麼個人的!我不是這個StackExhange特性的一大樂趣。它仍然是我的奧威爾的1984年太多了... – 2011-06-23 18:06:19

回答

2

它不錯,但可以肯定你在使用它之前瞭解手冊中列出的注意事項。目前,它處理約束的方式有點粗糙,但它在待辦事項列表上。這對分區特別有用。更多的OO示例將從people表中繼承以創建員工表。

當然缺點是它不能移植到任何其他rdbms,所以如果你必須在另一個rdbms上重新託管一個數據庫,你必須重寫一堆東西。

5

可能不是,PostgreSQL表的繼承存在警告,比如沒有全局唯一的約束,所以你失去了許多一致性保證。編寫性能良好的查詢也是一項相當大的挑戰。正如Scott指出的那樣,PostgreSQL繼承對於表分區來說只是一個非常有用的地方,因爲它是性能折衷的開始。

有2點共同的方式來使用標準的SQL成語類繼承:

  • 每個對象都有一個單獨的行中的超表,和子類對象也必須以特定的子類,表中的行,即通過外鍵引用引用超類字段。
  • 只需在一個大表中將所有超類和子類字段組合起來,並在值不適用的情況下將它們留爲NULL。這在PostgreSQL中效果特別好,因爲NULL值每行只消耗1位,添加/刪除字段到現有表非常快(無論數據量如何)。您可能會編寫觸發器來驗證特定類型的類所需的字段是否存在。
+0

抱歉無法得到第二點「只包括所有超類和子類...」只是繼承和postgres。最後如何讓外鍵約束與繼承一起工作?觸發器?檢查?一些手冊/鏈接?謝謝。 – Igor 2010-09-08 23:48:04