在mysql中捕获双向关系

时间:2012-05-08 13:38:32

标签: database-design

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

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

用户可以拥有0个或更多场景 场景必须与一个用户

关联

一种方法是创建User_Scenario_rels并使用来自用户和方案表的ID来创建关系。但这是最好的做法吗?这是一对多关系吗?

2 个答案:

答案 0 :(得分:2)

这是"一对多" relationship - one scenary有一个用户,一个用户有很多场景。

它通常由" user_id"建模。方案表上的列。

就本领域实践的数据库设计而言,用户之间没有区别0或更多场景"和"用户有一个或多个场景&#34 ;;理论上,如果你想强加所有用户必须至少有1个场景的规则,你就会实现一个约束。

答案 1 :(得分:0)

  

一种方法是创建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列会更好(也更容易)。