SQL table 1-N-M 情况的定义
SQL table definition for 1-N-M situation
我的情况很复杂,但是我可以将我的问题简化为以下情况:
假设一个幼儿园有 3 个表:“kids”、“corner”和“day”。
每个“天”,任意数量的“孩子”都可以在其中一个“角落”玩耍。
第二天,孩子们可以选择另一个角落玩耍。
所以每一天,孩子们和角落都必须是独一无二的。
这是一个在摆弄时要复制的示例数据库:
CREATE TABLE kids (
id INT,
name TEXT
);
INSERT INTO kids VALUES (1, "Paul");
INSERT INTO kids VALUES (2, "Mary");
INSERT INTO kids VALUES (3, "Tom");
INSERT INTO kids VALUES (2, "Gina");
CREATE TABLE corner (
id INT,
name TEXT
);
INSERT INTO corner VALUES (1, "Kitchen");
INSERT INTO corner VALUES (2, "Cars");
CREATE TABLE days (
id INT,
day DATE
);
基本上,您需要另一个 table 来表示三个实体之间的关系:
create table plays (
kid_id int references kids(id),
corner_id int references corner(id),
day_id int references days(id),
primary key (kid_id, day_id)
);
每一列都是对应引用的外键 table。主键确保给定的孩子每天只玩一个角落。
我的情况很复杂,但是我可以将我的问题简化为以下情况:
假设一个幼儿园有 3 个表:“kids”、“corner”和“day”。
每个“天”,任意数量的“孩子”都可以在其中一个“角落”玩耍。
第二天,孩子们可以选择另一个角落玩耍。
所以每一天,孩子们和角落都必须是独一无二的。
这是一个在摆弄时要复制的示例数据库:
CREATE TABLE kids (
id INT,
name TEXT
);
INSERT INTO kids VALUES (1, "Paul");
INSERT INTO kids VALUES (2, "Mary");
INSERT INTO kids VALUES (3, "Tom");
INSERT INTO kids VALUES (2, "Gina");
CREATE TABLE corner (
id INT,
name TEXT
);
INSERT INTO corner VALUES (1, "Kitchen");
INSERT INTO corner VALUES (2, "Cars");
CREATE TABLE days (
id INT,
day DATE
);
基本上,您需要另一个 table 来表示三个实体之间的关系:
create table plays (
kid_id int references kids(id),
corner_id int references corner(id),
day_id int references days(id),
primary key (kid_id, day_id)
);
每一列都是对应引用的外键 table。主键确保给定的孩子每天只玩一个角落。