2010-12-18 57 views
2

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


fooID

酒吧
barID

fooToBar
fooID
barID

+0

如果每个foo行只有多个酒吧行,那么您将foo表中的外键插入到酒吧表中。你需要一个foo和bar之间的交集表的唯一原因是如果这些表有多对多的关系。 – 2010-12-18 23:42:00

+0

需要删除我的评论 – gh9 2010-12-18 23:45:55

回答

3

的设计,你的名字是多对多的关系。如果foo和bar是彼此独立的,每个foo都可以与几个酒吧相关 - 并且每个酒吧可以与几个foos相关,那么这就是要走的路。

如果每个栏只能与一个富,你在1:N的关系,可能只是增加一个fooID列于表吧。

如果保持命名约定在您的整个数据库,那么就用这个名字没有问题(但更正大写)我会说。

+0

它应该如何大写? – gh9 2010-12-18 23:46:17

+0

只是一致的。你有foo,bar,fooToBar--看到这个,你可能会说从小写开始,然后是骆驼套,但是我的第一个认识是你的名字中有“bar”和“Bar”。这是个人的品味 - 我有这个一致的,但你可能会一致地使用这种技术(当我回答时,我真的没有看到你的大写字母的原则)。 – 2010-12-19 00:01:29

1

如果可以有多个酒吧单个,而不是周围的其他方式,那么你有什么是所谓的one-to-many relationship之间酒吧。为了模拟这种关系,您可以在中添加一个名为fooId的列。将不需要表格fooToBar

但是,如果能同时为多个酒吧单个FOOS单个酒吧那么你有一个many-to-many relationship foo和之间酒吧,这需要第三个连接表(fooToBar)。

关于命名约定,我通常使用适当的外壳(未骆驼套管),并加盖的每个数据库对象与标识所述对象属于该应用程序的前缀。另外,我通常命名我的多对多连接表,以便它们包含另外两个表的名称。例如,如果我是建设#1,我可能会前缀所以每个数据库对象,这意味着在许多一对多例如我的表将被命名为:

  • so_Foo
  • so_Bar
  • so_FoosBars

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

快乐编程!

0

如果foo bar关系是可选的,即您希望允许没有相应Foo行的Bar行,则您需要FooToBar表。否则,你可以将foo属性作为外键加入吧。