我有編碼一多了一些困難,許多關係:需要的編碼多了一些建議和反饋:在MySQL
我想這些:一對多的關係,如下圖所示的圖像表和關係設置,以便:
- 家長可以有一個以上的孩子(這裏的孩子是 「播放器」),和一個孩子可以有一個或更多的家長(最多 二) 。
- 「家庭」可以由一個或多個父母(最多兩個), 以及一個或多個孩子(無限)組成。
我不知道如何適應父母的姓氏不同於他們的「孩子」,反之亦然。我還沒有被告知這是否會成爲問題,但這是我認爲值得考慮的事情。 Parent和Player類都繼承了人類超類的字段(如名字,姓氏,地址,年齡,d.o.b等)。
我正要測試一些輸入到家庭餐桌,當我意識到我並不完全知道如何插入一個或更多的家長與一個或一個以上的孩子,他們的父母(或照料者)。我認爲我理論上已經理清了這一點,但經過測試後,我意識到它不會工作,我已經花了90多分鐘時間對一些想法進行草圖繪製,但我真的迷失了方向。
============================================= =====================================
UPDATE:27-04-2012 @ 22:19 NZST
我應該給出一個我正在尋找的結果的可視化表示 - 當查詢一個包含這些表的數據庫時。這裏是直觀表示法:
+-------------------+-----------------+---------------------+
| ParentsFirstName | ParentsLastName | ChildrenInFamily |
+-------------------+-----------------+---------------------+
| Gregory | Peck | Michael |
| Laura | Peck | Michael |
| Martha | Petersen | Matt, Christopher |
| Chris | Michaels | Richard, Shaun |
| Nadine | Michaels | Richard, Shaun |
| Barry | Dackers | Harry |
| Kevin | Mitchell | Daniel |
| Rebecca | Mitchell | Daniel |
+-------------------+-----------------+---------------------+
「孩子」在一個名爲「玩家」的表中,父母在一個名爲「父母」的表中。在這篇文章中的MySQL代碼代表涉及這個特定問題的表(你應該注意到我使用Person類作爲超類,而父/子表作爲子類)。通過使用外鍵引用其他一些表格(「學校ID」字段來自名爲「學校」的表格,其具有「學校名稱」字段)。
我不確定我是否已經爲我想實現的目標構建了表格,但是通過做一些研究,我發現了一個名爲GROUP_CONCAT的函數,它至少給了我一個關於查詢可能的外觀的函數 - for這個特殊的問題。
容納不共享同一姓氏的父母,以及孩子不共享相同的姓氏作爲父母,是另一個大的挑戰,我不能甚至試圖繞到我的頭(我我想這對寄養家庭來說也是如此)。因此,對於上面的可視化,我假設非單親父母已婚並且擁有相同的姓氏,並且這兩個孩子的父姓都是一樣的。
============================================= =====================================
這是我嘗試過的一些代碼着手創建設法解決這部分數據庫的一部分(注:「玩家」是父母的「兒女」):
DROP TABLE IF EXISTS `person` ;
CREATE TABLE `person` (
`personID` INT(5) NOT NULL AUTO_INCREMENT ,
`firstName` VARCHAR(50) NOT NULL ,
`lastName` VARCHAR(50) NOT NULL ,
`dateOfBirth` DATE NOT NULL ,
`personType` CHAR(6) NOT NULL,
`photo` BLOB NULL DEFAULT NULL ,
PRIMARY KEY (`personID`))
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `parent` ;
CREATE TABLE `parent` (
`parentID` INT(5) NOT NULL,
FOREIGN KEY (`parentID`) REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `player` ;
CREATE TABLE `player` (
`playerID` INT(5) NOT NULL,
`schoolID` INT(5) NOT NULL,
FOREIGN KEY (`playerID`)
REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`schoolID`)
REFERENCES `school` (`schoolID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `family` ;
CREATE TABLE `family` (
`parentID` INT(5) NOT NULL ,
`playerID` INT(5) NOT NULL ,
PRIMARY KEY (`parentID`, `playerID`),
FOREIGN KEY (`playerID`)
REFERENCES `player` (`playerID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`parentID`)
REFERENCES `parent` (`parentID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
如果有人能幫助我理清這個問題給出一些指導,甚至一些通用的例子和解釋,那將是非常好的。我認爲這是一種多種多樣的關係,我不能完全放棄,因爲父母可以有一個或多個孩子,而一個孩子可以有一個或多個父母(在這種情況下,一個家庭不會真正成爲一個沒有孩子的家庭)。
非常感謝提前!
如何通過另一列擴展'家庭'表爲secont家長? – mrab 2012-04-27 06:09:38
@mrab你能解釋一下這一點嗎?我正在使用「Parent」表中的外鍵來鏈接「Family」表,因此我如何在這裏照顧至少兩個父母? – Rob 2012-04-27 10:50:45