数据库表设计问题

时间:2010-12-18 23:38:07

标签: sql database database-design

我有三张桌子(下面的定义)。我的问题是每个“foo”行可以有多个“bar”行。所以我需要一个“fooToBar”表。这是正确的设计吗?这种情况的名称或设计模式是什么?这个表比“fooToBar”表有更好的名称吗?非常感谢你。

FOO
fooID
命名


barID
命名

fooToBar
fooID
barID

3 个答案:

答案 0 :(得分:3)

您命名的设计适用于n:m关系。如果foo和bar彼此独立,并且每个foo可以与几个条形相关 - 并且每个条形也可以与几个foos相关,那么这就是要去的方法。

如果每个栏只能与一个foo相关,那么你就是1:n关系,并且可以只在条形表中添加一个fooID列。

我会说如果你在整个数据库中保留命名约定,那么这个名称没有问题(但是更正了大小写)。

答案 1 :(得分:1)

如果单个 foo 可以有多个,而不是相反,那么你就拥有了所谓的 one-to-many relationship foo bar 之间。要为此类关系建模,您需要在中添加名为fooId的列。不需要 fooToBar 表。

但是,如果单个 foo 多个 foos 可以同时包含多个 然后您在 foo bar 之间有一个many-to-many relationship,这需要第三个连接表( fooToBar )。

关于命名约定,我通常使用正确的大小写(不是驼峰大小写),并使用标识该对象所属应用程序的前缀来附加每个数据库对象。此外,我通常命名我的多对多连接表,以便它们包含其他两个表的名称。例如,如果我正在构建Stackoverflow,我可能会为每个数据库对象添加前缀 so ,这意味着我的多对多示例中的表将被命名为:

  • so_Foo
  • so_Bar
  • so_FoosBars

我认为比命名细节更重要的是你选择一个约定并坚持下去。

快乐编程!

答案 2 :(得分:0)

如果foo bar关系是可选的,那么你需要FooToBar表,即如果你想允许没有相应Foo行的Bar行。否则你可以把foo属性作为外键放在bar中。