我的ER图有点问题。假设我想与学生、成员和团队绘制一个图表。这是我的规格:
member有一个唯一的成员ID。我做了ER图:
member-id (key attribute)
|
-------- - -----------
- team -------------------- - - mem - ------------- - student -
-------- - -----------正如我之前说过的,学生不必成为任何团队的一员。在这种情况下,我的图表工作正常吗?我问它是因为member_id是一个独特的密钥。
发布于 2013-10-05 12:11:52
目前,我在您的模型中看到了两个可能的问题:
Member可以在不引用Student的情况下存在。1.1。如果在Member中删除一个带有ON DELETE CASCADE外键的Student选项,它将删除您的学生。1.2。如果删除一个Student,可能会有一个没有引用任何Student的Member。Member属性放置到Student表中,那么每次都必须将它们设置为NULL,然后需要取消引用Student和Member。同时,它也会导致表Student的松散,它的独立性。如果你不这么做,这个问题就永远不会发生。我可能会建议你这样做:

其中: AI = AUTO_INCREMENT,NN = NOT NULL,UN = UNSIGNED。
Member记录,表Student中可能只有一条记录。Member表中的记录存在于Student表记录中,则学生可以成为成员。但是,他可能在Member中没有记录,但在Student表中仍然有记录。意思是他不是任何团队的一员。如何做到这一点?
Member表的主键设置为外键,引用Student表的主键。PRIMARY KEYs默认为UNIQUE,不能有重复值。因此,Member表中不会有两条记录用于表Student的一条记录。Member创建一个外键,引用Team表的主键。只有成员才能有一个团队。Student只有一条记录可以放在Member表中,所以每个学生只能在一个团队中。Member记录,则Student关联记录将不再是任何团队的成员,但仍然是学生。测试脚本(假设MySQL关系数据库管理系统):
DROP SCHEMA IF EXISTS `test`;
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `test`;
CREATE TABLE IF NOT EXISTS `Team` (
`IDTeam` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`etc` VARCHAR(45) NULL,
PRIMARY KEY (`IDTeam`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `Student` (
`IDStudent` INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`IDStudent`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `Member` (
`IDMember` INT UNSIGNED NOT NULL,
`TeamID` INT UNSIGNED NOT NULL,
`etc` VARCHAR(45) NULL,
PRIMARY KEY (`IDMember`),
INDEX `fk_Member_Team` (`TeamID` ASC),
CONSTRAINT `fk_Member_Student`
FOREIGN KEY (`IDMember`)
REFERENCES `Student` (`IDStudent`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_Member_Team`
FOREIGN KEY (`TeamID`)
REFERENCES `Team` (`IDTeam`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;https://dba.stackexchange.com/questions/51073
复制相似问题