我有一个用于计时的学校比赛项目,而且我一心要解决表的构造。
请看以下示例。

这可能发生->



比赛|参赛者

游泳|约翰·史密斯

驾驶约翰·史密斯



您会看到同一个名字出现了两次,但不在同一比赛中。

这种情况是错误的,所以我该如何防止出现以下情况->



比赛|参赛者

游泳|约翰·史密斯

游泳|约翰·史密斯



我想避免在同一比赛中重复。

最佳答案

如果您无法更改表格的表格结构,则可以对比赛和参赛者的组合添加唯一约束:

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/

10-11 06:38