我有兩個表:SQL兩條表具有相同的主鍵
person(personID, name, address, phone, email)
Player(dateOfBirth, school)
我會用什麼樣的代碼,所以我可以在人使用PERSONID作爲兩個人以及球員的表主鍵。我知道playerID也必須是Player中的外鍵。有任何想法嗎?
我有兩個表:SQL兩條表具有相同的主鍵
person(personID, name, address, phone, email)
Player(dateOfBirth, school)
我會用什麼樣的代碼,所以我可以在人使用PERSONID作爲兩個人以及球員的表主鍵。我知道playerID也必須是Player中的外鍵。有任何想法嗎?
目前尚不清楚,你需要兩個表的信息,除非有代表的人誰不是球員。假設情況是這樣的(其他人可以是教練,父母,裁判等)。此外,即使教練確實是出生的,他們的出生日期對系統而言並不重要(所以不需要將出生日期轉移回人員表格)。另外,假設你正在與只上一所學校的人打交道;如果他們去年在不同的學校,球員記錄將在季節之間更新。 (如果您需要有關不同年份出席的學校的歷史信息,您將需要一個不同的表格結構。)假設在適當的時候您會向播放器表中添加更多字段也是合理的。
在這種情況下,你需要的球員數據鏈接回到正確的人:
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整數而不是學校名稱加入;這往往是更緊湊。
您可以添加一個personID字段並以管理人員表的方式進行管理嗎?每次插入播放器時,您都必須插入相應的具有相同ID的人員。
當然,如果你的人的概念是抽象的,那麼它應該definetly是在同一個表
我建議你從「球員」表移動領域誕生之日起就與「人」表(畢竟,一個人沒有出生的多個日期!),然後添加「PERSONID」字段到'玩家'表。如果一個人有多個學校(小學,中學,高中),那麼'玩家'表的主鍵應該是personID + school。
將一個表的主鍵用作第二個表中的主鍵肯定沒有問題;這樣的第二個表格可以幫助節省磁盤空間並改善訪問時間。假設有一個大的文本字段被存儲給一些人 - 但不是全部 - 人。將該字段存儲在輔助表中(使用相同的主鍵)意味着只有需要此字段的人員才能在輔助表中記錄。
首先,你應該在Player
表personID
爲好。
完成之後,您可以將personID
作爲Player
表的主鍵,也可以具有單獨的playerID
列,並且這可以是主鍵。
您選擇哪一個取決於您的應用程序的要求。如果你認爲一名球員只與一個人有關聯,而且肯定是一個人,那麼personId
可能是主要關鍵。
但在許多情況下,您將需要一個單獨的playerId
(我建議有一個)。例如,如果沒有建模電腦遊戲,所有玩家可能不是人 - personId
將是null
。此外,如果您對與足球運動員不同的籃球運動員進行建模,則可以同時玩這兩款遊戲的玩家在玩家表中擁有多個條目(具有相同personId
的多條記錄)。
是的我在問題中簡化了它。還有一個球員球隊,教練,教練球隊表,所有這些我都要使用personID。我可以按照你對這些表格所建議的方式進行操作。 – batsta13
是的,你也可以爲其他桌子做同樣的事情。 –