我有一个用于计时的学校比赛项目,而且我一心要解决表的构造。
请看以下示例。
这可能发生->
比赛|参赛者
游泳|约翰·史密斯
驾驶约翰·史密斯
您会看到同一个名字出现了两次,但不在同一比赛中。
这种情况是错误的,所以我该如何防止出现以下情况->
比赛|参赛者
游泳|约翰·史密斯
游泳|约翰·史密斯
我想避免在同一比赛中重复。
最佳答案
如果您无法更改表格的表格结构,则可以对比赛和参赛者的组合添加唯一约束:
ALTER TABLE competitions
ADD CONSTRAINT competitions_unq UNIQUE (competition, contestant);
但这确实不是一个很好的解决方案。更加惯用的方法是为比赛和参赛者提供单独的表格,然后使用m:n表格将它们加入:
CREATE TABLE competitions (
id INT PRIMARY KEY,
name VARCHAR(100),
-- other columns
);
CREATE TABLE contestants (
id INT PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100),
-- other columns
);
CREATE TABLE competition_contestants (
competition_id INT NOT NULL,
contestant_id INT NOT NULL,
PRIMARY KEY (competition_id, contestant_id),
FOREIGN KEY competition_id REFERENCES competition(id),
FOREIGN KEY contestant_id REFERENCES contestant(id)
);
关于mysql - mysql表的构造,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59252826/