2009-04-15 84 views
3

在設計數據庫時,我聽到很多關於子類型表的信息,並且我完全瞭解它們背​​後的理論。但是,我從來沒有真正看到過表格分類。你如何創建表的子類型?我正在使用MS Access,並且正在尋找一種在SQL中以及通過GUI(Access 2003)執行此操作的方法。子類型數據庫表

乾杯!

回答

10

一個簡單的例子是在表中有一個主鍵和一些列的Person表。現在您可以創建另一個名爲Student的表,該表具有person表(它的超類型)的外鍵。現在學生表有一些超級類型沒有的特性,例如GPA,Major等等。但名字,姓氏等等都在父表中。您始終可以通過Student表中的外鍵在Person表中訪問學生名稱。

不管怎麼說,只要記住以下幾點:

  • 的層次描繪父類型和子類型之間的關係
  • 超類型具有共同的屬性
  • 亞型具有唯一身份屬性
+2

對不起,但我想你只是描述一個REFERENCE。你所謂的超類型表缺少一個類型屬性!對於更好的IMO示例,請參閱本主題中的CREATE TABLE Vehicles文章:http://bytes.com/groups/ms-sql/808389-design-question-type-heirarchy-supertype-queries – onedaywhen 2009-04-20 09:15:19

1

表格的子類型是EER圖表中的概念性事物。我還沒有看到直接支持它的RDBMS(不包括對象關係DBMS)。它們通常在任一

  1. 一組爲亞型的每個屬性爲空的列的實現在單個表中
  2. 隨着基本類型屬性和每個基本表至多一行一些其它表的表中將包含子類型屬性
1

當使用ORM映射器生成準確建模域的類子類型層次結構時,表子類型的概念很有用。

一個子類型表將有一個外鍵返回到它的父母,這也是子類型表的主鍵。

+0

如果子類型表記錄與父表的關係爲1:1,爲什麼他們不僅僅將FK用作PK? – 2011-02-26 01:02:04

1

請記住,在設計一個綁定的應用程序,與Access應用程序一樣,子類型在連接方面會帶來沉重的成本。例如,如果您有一個帶有三個子類型表的超類型表,並且您需要一次顯示所有三個表(並且您不僅需要顯示超類型日期),您最終還是可以選擇使用三個外部聯接和Nz(),或者您需要三個互斥的SELECT語句(每個子類型一個)的UNION ALL。這些都不可編輯。

我打算從第一個主要應用程序中粘貼一些SQL,與超級/子類型表一起工作,但看着它,SQL非常複雜,只會讓人們感到困惑。這並不是因爲我的應用程序很複雜,而是因爲問題的本質非常複雜 - 向用戶展示整套數據(包括超類型和子類型)本質上是複雜的。與我合作的結論是,如果只有一個子類型表,我會變得更好。

這並不是說它在某些情況下沒有用處,只是Access的綁定表單不一定很容易將這些數據呈現給用戶。

1

我有一個類似的問題,我一直在努力。

在尋找可重複的模式時,我想確保我沒有放棄引用完整性,這意味着我不會使用(TABLE_NAME,PK_ID)解決方案。

我最終選擇:

燈頭型號表:CUSTOMER

子類型表:人,企業,GOVT_ENTITY

我把客戶可空PRERSON_ID,BUSINESS_ID和GOVT_ENTITY_ID領域,與國外鍵在每一個,和一個檢查約束,只有一個不是null。添加新的子類型很簡單,只需要添加可空的外鍵並修改檢查約束即可。