2012-05-20 51 views
2

我有兩個表:SQL兩條表具有相同的主鍵

person(personID, name, address, phone, email) 

Player(dateOfBirth, school) 

我會用什麼樣的代碼,所以我可以在人使用PERSONID作爲兩個人以及球員的表主鍵。我知道playerID也必須是Player中的外鍵。有任何想法嗎?

回答

2

目前尚不清楚,你需要兩個表的信息,除非有代表的人誰不是球員。假設情況是這樣的(其他人可以是教練,父母,裁判等)。此外,即使教練確實是出生的,他們的出生日期對系統而言並不重要(所以不需要將出生日期轉移回人員表格)。另外,假設你正在與只上一所學校的人打交道;如果他們去年在不同的學校,球員記錄將在季節之間更新。 (如果您需要有關不同年份出席的學校的歷史信息,您將需要一個不同的表格結構。)假設在適當的時候您會向播放器表中添加更多字段也是合理的。

在這種情況下,你需要的球員數據鏈接回到正確的人:

CREATE TABLE Player 
(
    PlayerID  INTEGER NOT NULL PRIMARY KEY REFERENCES Person(PersonID), 
    DateOfBirth DATE NOT NULL, 
    School  VARCHAR(20) NOT NULL REFERENCES School(SchoolName) 
); 

我假設到那個學校的名單是有限的。您可以使用SchoolID整數而不是學校名稱加入;這往往是更緊湊。

+0

是的我在問題中簡化了它。還有一個球員球隊,教練,教練球隊表,所有這些我都要使用personID。我可以按照你對這些表格所建議的方式進行操作。 – batsta13

+0

是的,你也可以爲其他桌子做同樣的事情。 –

0

您可以添加一個personID字段並以管理人員表的方式進行管理嗎?每次插入播放器時,您都必須插入相應的具有相同ID的人員。

當然

,如果你的人的概念是抽象的,那麼它應該definetly是在同一個表

0

我建議你從「球員」表移動領域誕生之日起就與「人」表(畢竟,一個人沒有出生的多個日期!),然後添加「PERSONID」字段到'玩家'表。如果一個人有多個學校(小學,中學,高中),那麼'玩家'表的主鍵應該是personID + school。

將一個表的主鍵用作第二個表中的主鍵肯定沒有問題;這樣的第二個表格可以幫助節省磁盤空間並改善訪問時間。假設有一個大的文本字段被存儲給一些人 - 但不是全部 - 人。將該字段存儲在輔助表中(使用相同的主鍵)意味着只有需要此字段的人員才能在輔助表中記錄。

1

首先,你應該在PlayerpersonID爲好。

完成之後,您可以將personID作爲Player表的主鍵,也可以具有單獨的playerID列,並且這可以是主鍵。

您選擇哪一個取決於您的應用程序的要求。如果你認爲一名球員只與一個人有關聯,而且肯定是一個人,那麼personId可能是主要關鍵。

但在許多情況下,您將需要一個單獨的playerId(我建議有一個)。例如,如果沒有建模電腦遊戲,所有玩家可能不是人 - personId將是null。此外,如果您對與足球運動員不同的籃球運動員進行建模,則可以同時玩這兩款遊戲的玩家在玩家表中擁有多個條目(具有相同personId的多條記錄)。

相關問題