我有两个表:
1)用户
2)场景
它们之间的关系可以描述为:
用户可以有 0 个或多个场景
场景必须与一个用户关联
一种方法是创建 User_Scenario_rels 并使用用户和场景表中的 ID 来创建关系。但这是最佳实践吗?这是一对多的关系吗?
我有两个表:
1)用户
2)场景
它们之间的关系可以描述为:
用户可以有 0 个或多个场景
场景必须与一个用户关联
一种方法是创建 User_Scenario_rels 并使用用户和场景表中的 ID 来创建关系。但这是最佳实践吗?这是一对多的关系吗?
这是一种“一对多”的关系——一个场景有一个用户,一个用户有很多场景。
它通常由场景表上的“user_id”列建模。
就现场实践的数据库设计而言,“一个用户有0个或多个场景”和“一个用户有1个或多个场景”之间没有区别;理论上,如果您想强制规定所有用户必须至少有 1 个场景,您将实施一个约束。
一种方法是创建 User_Scenario_rels 并使用用户和场景表中的 ID 来创建关系。但这是最佳实践吗?这是一对多的关系吗?
它是否符合您的要求并实现 1:n 关系取决于您是否正确获取键和约束。这不是唯一的方法,在这种特殊情况下,它允许在没有用户的情况下存在场景。
create table users (
user_id integer primary key
);
create table scenarios (
scenario_id integer primary key
);
-- Separate table allows users to have zero scenarios.
create table user_scenarios (
user_id integer not null references users (user_id),
scenario_id integer not null references scenarios (scenario_id),
-- This primary key lets each user have multiple scenarios
primary key (user_id, scenario_id),
-- This unique constraint allows each scenario id number to
-- be used only once. (So it's associated with only one user.)
unique (scenario_id)
);
正如 Neville K 所说,在场景表中包含一个不可为空的 user_id 列会更好(也更容易)。