我有编码一多了一些困难,许多关系:需要的编码多了一些建议和反馈:在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