Database design 在mysql中捕获双向关系

Database design 在mysql中捕获双向关系,database-design,Database Design,我有两张桌子: 1) 用户 2) 情景 它们之间的关系可以描述为: 用户可以有0个或多个场景 场景必须仅与一个用户关联 一种方法是创建用户\方案\关系,并使用用户和方案表中的ID创建关系。但这是最佳实践吗?这是一对多关系吗 这是一种“一对多”关系——一个场景有一个用户,一个用户有多个场景 它通常由场景表上的“user\u id”列建模 在该领域的数据库设计实践中,“一个用户有0个或多个场景”和“一个用户有1个或多个场景”之间没有区别;理论上,如果您想要强制所有用户必须至少有一个场景的规则,那么您

我有两张桌子:
1) 用户
2) 情景

它们之间的关系可以描述为:

用户可以有0个或多个场景
场景必须仅与一个用户关联

一种方法是创建用户\方案\关系,并使用用户和方案表中的ID创建关系。但这是最佳实践吗?这是一对多关系吗

这是一种“一对多”关系——一个场景有一个用户,一个用户有多个场景

它通常由场景表上的“user\u id”列建模

在该领域的数据库设计实践中,“一个用户有0个或多个场景”和“一个用户有1个或多个场景”之间没有区别;理论上,如果您想要强制所有用户必须至少有一个场景的规则,那么您将实现一个约束

一种方法是创建用户和场景,并使用来自用户和场景的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所说,在场景表中包含一个不可为空的用户id列更好(也更容易)。

0或更多与1或更多之间有区别吗?