我有三张桌子(下面的定义)。我的问题是每个“foo”行可以有多个“bar”行。所以我需要一个“fooToBar”表。这是正确的设计吗?这种情况的名称或设计模式是什么?这个表比“fooToBar”表有更好的名称吗?非常感谢你。
FOO
fooID
命名
巴
barID
命名
fooToBar
fooID
barID
答案 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 ,这意味着我的多对多示例中的表将被命名为:
我认为比命名细节更重要的是你选择一个约定并坚持下去。
快乐编程!
答案 2 :(得分:0)
如果foo bar关系是可选的,那么你需要FooToBar表,即如果你想允许没有相应Foo行的Bar行。否则你可以把foo属性作为外键放在bar中。