2016-08-24 41 views
0

我試圖讓這個演示數據庫,在那裏我有一個像可以將數據庫中所有表的主鍵作爲一個表的外鍵引用嗎?

Household(Primary key - hid) 
People(Primary key - pepid) 
ParChildOld(Primary key - pcoid) 
Job(Primary key - empid) 
School(Primary key - schlid) 
Pension(Primary key - penid) 

表現在,我對每個家庭在不同的表的人細節上的各種屬性。

我可以把所有表的主鍵和一個表,說AllKeys和引用他們作爲外鍵在這個特定的表?

即:

AllKeys Table 
Primary Key: AKid 
-- Other columns include 
foreign keys- hid,pepid,pcoid,empid,schid,penid* 

我不知道這是愚蠢的問與否,但是,

是允許這樣的參考?它可以被認爲是規範化的形式嗎?以這種方式加入AllKeys表和任何其他表(取決於查詢)的查詢是否會有效地工作?

+0

我不知道確切的問題是什麼,但你必須明確指定你的外鍵是指表。只有一個。 (但是你可以在同一列有很多外鍵限制,都指向不同的東西) – Thilo

+1

它可以使用,但這一切都取決於你的要求。 –

+0

這是可能的,但更重要的是,它是適當的嗎?您的表名(AllKeys)不會喚起可能證明這種用法的商業謂詞。你爲什麼想這樣做?這張表的含義是什麼? – reaanb

回答

1

如果所有這些表都是相關的,但可能會失敗第三和第四個正常形式,在表中同時具有函數和多值依賴關係。

考慮到爲一個家庭存儲關係所需的大量重複:一個家庭(hid = 1),兩個父母(pepid = 1,2),兩個孩子(pepid = 3,4),四個父母(pcoid = 1,2,3,4),兩個工作(empid = 1,2),一個學校爲兩個孩子(schlid = 1)和兩個退休金(penid = 1,2)。

AKid | hid | pepid | pcoid | empid | schlid | penid 
-----|-----|-------|-------|-------|--------|------ 
1 | 1 | 1  | 1  | 1  | null | 1 
2 | 1 | 1  | 2  | 1  | null | 1 
3 | 1 | 2  | 3  | 2  | null | 2 
4 | 1 | 2  | 4  | 2  | null | 2 
5 | 1 | 3  | 1  | null | 1  | null 
6 | 1 | 3  | 2  | null | 1  | null 
7 | 1 | 4  | 3  | null | 1  | null 
8 | 1 | 4  | 4  | null | 1  | null 

的另一個問題是,假設表ParChildOld包含父和子列,你沒有指定是否在AllKeys一個pcoid參考的方式,pepid是否指的是父母或孩子。

總之,不要這樣做。

+0

謝謝..這個例子清除了混亂.. – Shachi

1

不,這會增加複雜性。

  1. 你需要編寫額外的代碼,以保持這些FKS
  2. 由於大量DML操作的表可能產生死鎖(這取決於數據庫引擎,你要使用)和你的整個數據庫將停止因爲大多數查詢將取決於此表

保持數據處於規範化形式,並將您的努力放在查詢上並對其進行維護。

你應該更專注於表格上的正確索引(根據你將如何查詢它們)。

David Scarlett has defined it with a very nice example.

+0

明白了......它最好不要使用.. thanku。 – Shachi

相關問題