设计表:一对多,一对一同时?

时间:2011-01-08 22:28:58

标签: database database-design

我不确定我是否正确地建模了这种类型的关系,也许有人可以提供一些关于这是否合理的见解:

假设我们有一个典型的父子关系,每个父母可以有很多孩子,但我们需要跟踪父母的单身(喘息)最喜欢的孩子......


表格父

- FavoriteChildID


表儿童

- ParentID

因此链接纵横交错,其中一个是多对一,另一个是一对一。这被认为是好的设计吗?在子表中有一个列,在任何时候只有一行可以被标记为收藏,这会更好吗?还有别的吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我认为最好的设计是防止数据不一致并防止人们有足够绳索自行挂起的设计。

如果您只想要父母的一个收藏,那么父母可能应该有一个favoriteChildId列。

如果您在孩子中添加了一个喜欢的标志列,您将需要做更多工作以确保同一父级的两个子记录不能都被标记为收藏夹。

如果您怀疑将来可能会有不止一个,那么额外的工作当然也值得。

设计真正取决于人际关系以及未来是否可能出现不同“最喜欢”关系的可能性。

答案 1 :(得分:1)

附加表怎么样?

table favourite(
  ,parent_id
  ,child_id
  ,primary key(parent_id)
);

对于所有面向喜欢的查询都会有所帮助。