2016-06-07 93 views
0

我有一個訪問數據庫,其中包含23個表。 有一個主表,其中包含所有測試設備,幷包含 列標題4-26。其他22張桌子用於容納與一個部分相關的設備(4-26)。 我一直在試圖做的是在每個部分表格與主表格的部分列標題之間建立關係。如果主表第4列中有一個「X」,則將該列自動添加到第4節表中。根據不是主鍵的列創建關係?

由於數據已經在主表中,所以這是一種矯枉過正。不過,我想重新構建一下主表,並在應用程序運行時通過主表讀取設備並將其分開。

問題:

我已經嘗試過建立的關係,但是,我的「關係」的類型是「不確定」我相信這是因爲該表不是引用對方的主鍵列。

我在每個節表中創建了一個節列來表示值4-26。然後我將其設置爲我的主鍵,但主鍵(據我所知)必須是唯一的,以至於無法工作。

有什麼建議嗎?

+0

你在哪裏引用「indeterminate」? – philipxy

+0

請編輯你的aswer以明確你的問題是什麼。 – philipxy

回答

0

表的列的任何列表可以在其中形成外鍵。引用表和colums列表只需引用在參考表中構成候選鍵的列表。

在SQL中,PRIMARY KEY聲明瞭一個UNIQUE NOT NULL列列表。這被稱爲超級鍵。不包含更小超級密鑰的超級密鑰是候選密鑰。主鍵與完整性&規範化無關,候選鍵可以。你可以調用一些候選鍵的主鍵。 (所以SQL PRIMARY KEY實際上聲明瞭一個超級密鑰,你可能稱之爲主要超級密鑰,這可能是一個候選密鑰。)

外鍵說如果你用引用列列表中的列名替換它們的值在引用表的一行中,您必須能夠通過將被引用列列表中的列名替換爲被引用表的一行中的值來製作相同的值列表。如果是這種情況,並且還沒有一個從引用表到引用表的外鍵鏈表示相同的事物,則聲明外鍵。 (DBMS將使用該事實進行完整性和優化。)

PS (基本表或查詢結果的值)是否表示應用程序關係/關聯。某些工具,方法和演示文稿稱外鍵爲「關係」。

0

在主表中建立包含部分值的主鍵,並在部分表中使用該主鍵作爲該表的主鍵和返回主表的外鍵。

create table TestEquipment(
    ID  AutoNumber primary key, 
    Section int not null, 
    ..., -- other fields common to test equipment 
    constraint CK_TestEquipmentSection(Section between 4 and 26), 
    constraint UQ_TestEquipmentLink unique(ID, Section) 
); 

由於ID本身是唯一的,爲什麼要創建一個唯一的約束ID和段值?因此,我們可以參考章節表中與FK的組合:

create table Section4(
    ID  int not null primary key, 
    Section int not null, 
    ..., -- other fields for section 4 entries 
    constraint CK_Section4 check(Section = 4), 
    constraint FK_Section4TE foreign key(ID, Section) 
     references TestEquipment(ID, Section) 
}; 

create table Section5(
    ID  int not null primary key, 
    Section int not null, 
    ..., -- other fields for section 5 entries 
    constraint CK_Section5 check(Section = 5), 
    constraint FK_Section5TE foreign key(ID, Section) 
     references TestEquipment(ID, Section) 
}; 

其他部分表格將被類似地定義。當輸入一個測試設備時,將生成關鍵值,並通過在TestEquipment中創建一個條目來建立部分編號。只能在帶有匹配部分值的部分表中進行輸入。也就是說,如果TestEquipment中的任何條目的ID值爲1001且Section值爲4,則可以包含ID值爲1001的條目的唯一部分表將成爲Section4表。任何嘗試將其輸入任何其他部分表格將被拒絕。

這是關於最簡單的方法來做你會試圖做的事情。