我应该如何命名将两个表一起映射的表?

dev*_*xer 126 sql database database-design data-modeling naming-conventions

假设我有两张桌子:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList
Run Code Online (Sandbox Code Playgroud)

我该怎么称呼将颜色映射到形状的表格?

Table: ???
Columns: ColorId, ShapeId
Run Code Online (Sandbox Code Playgroud)

tos*_*osh 172

计算机科学只有两件难事:缓存失效和命名事物
- Phil Karlton

为表示many-to-many关系的表提供一个好名称可以使关系更容易阅读和理解.有时找到一个好名字并不是微不足道的,但通常值得花一些时间思考.

一个例子:ReaderNewspaper.

A Newspaper有很多Readers,Reader有很多Newspapers

你可以调用这种关系,NewspaperReader但是一个名字Subscription可能会更好地传达表格的内容.

Subscription如果您想稍后将表映射到对象,该名称也更加惯用.

命名many-to-many表的约定是关系中涉及的两个表的名称的串联.ColourShape在你的情况下,这将是一个合理的默认值.也就是说,我认为尼克D 提出了两个很好的建议:StyleTexture.

  • "计算机科学中只有两件难事:缓存失效,命名事物和逐个错误" (99认同)
  • +1:说得好 - 现在精心挑选的名字将使未来的可维护性变得更加容易. (10认同)
  • 假设有一个产品类别和另一个食谱类别。对于这两个表,我们将有recipe_categories和product_categories,并且由于我们不能只为两个表“categories”表名,为了防止冲突,product和recipe的联结表将是“recipe_recipe_categories”和“product_product_categories” (3认同)
  • 从逻辑上讲,严格地说连接信息并不意味着添加新信息.我想当你试图找到一个适合连接表的词时会发生这种情况.阅读报纸的人不会让他们成为订阅者,也没有没有颜色的形状.使用"订阅者"在将读者连接到报纸时添加新信息(含义).并没有用语言来描述形状和颜色的联系 - 从来没有相反的东西,因此没有名称.请记住,联结表中没有给出新属性. (3认同)

Nic*_*kis 34

ColorShapeMapStyleTexture怎么样.

  • +1用于提供比仅仅加入表格名称更优雅的东西 (4认同)

Bil*_*win 22

有趣的是,大约一半的答案为任何实现多对多关系的表提供了一个通用术语,而另一半的答案建议了这个特定表的名称.

我通常称这些表为交叉表.

在命名约定方面,大多数人给出的名称是多对多关系中两个表的混合.所以在这种情况下," ColorShape"或" ShapeColor." 但我发现这看起来很人性和尴尬.

Joe Celko在他的书"SQL Programming Style"中建议以某种自然语言的方式命名这些表.例如,如果Shape由Color着色,则为表命名ColoredBy.然后你可以有一个或多或少自然读取的图表如下:

Shape <-- ColoredBy --> Color
Run Code Online (Sandbox Code Playgroud)

相反,你可以说颜色为一个形状:

Color <-- Colors --> Shape
Run Code Online (Sandbox Code Playgroud)

但这看起来像中间表Color与复数命名约定相同.太混乱了.

可能最清楚的是使用ColoredBy命名约定.有趣的是,使用被动语音使命名约定更加清晰.

  • 类似于OMG小马的评论,如果其他东西可以有颜色会发生什么?如果我有另一个将Text映射到Color的表,我需要一个唯一的名称.也许`ShapeHasColor`和`TextHasColor`? (4认同)
  • 我想`HasColor`可能是使用自然语言的交集表的另一个可能名称. (2认同)

OMG*_*ies 18

只要提供信息,就可以将表命名为您喜欢的名称:

COLOR_SHAPE_XREF
Run Code Online (Sandbox Code Playgroud)

从模型的角度来看,该表称为连接/循环/交叉引用表.我一直保持着_XREF在最后使用这种关系的习惯.

  • 我也使用 _XREF ......它对我来说总是有意义的。 (2认同)

Ed *_*ess 7

这是一个关联实体,并且本身通常具有重要意义.

例如,TRAINS和TIMES之间的多对多关系产生了一个时间表.

如果没有明显的新实体(例如时间表),那么约定是将两个单词一起运行,给出COLOUR_SHAPE或类似的.


小智 6

映射表通常称为映射表。

ColorToShape
ColorToShapeMap
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,无论它是否是映射表,我都喜欢在名称中使用`To`的想法。如果您的Shape具有HighlightColor怎么办。如果您将其称为“ ShapeHighlightColor”,则无论是映射到颜色的ShapeHighlight还是映射到突出显示颜色的Shape都有点模糊。因此,`ShapeToHighlightColor`可能更清晰。 (2认同)
  • 仅供参考:Oracle(无论如何都是 9i/10g)对表名有 32 个字符的限制,因此您不能“太”冗长。 (2认同)

Daf*_*ees 6

我曾与DBA一起工作过,称之为联接

Colour_Shape是相当典型的-除非该关系具有明确的域特定名称。

  • 我不喜欢下划线,因为它们与外键命名约定相冲突,以至于你最终会得到像 `Colour_Shape_Colour` 和 `Colour_Shape_Shape` 这样令人讨厌的名字。 (2认同)

pri*_*kar 6

Junction table

或者 Bridge Table

或者 Join Table

或者 Map Table

或者 Link Table

或者 Cross-Reference Table

当我们处理多对多关系时,这会派上用场,其中来自两个表的键构成联结表的复合主键。


Pal*_*mer 6

我建议使用实体名称的组合并将它们放在复数形式中。因此,表的名称将表达“多对多”连接。

在你的情况下:

颜色 + 形状 = 颜色形状

  • 如果您要走“表名称”路线,这会更好,因为单数版本“通常”是命名空间表。 (2认同)

Bil*_*ard 5

我通常听到称为连接表。我根据它连接的内容命名表格,所以在你的情况下,要么是 ColorShape,要么是 ShapeColor。我认为 Shape 有颜色比 Color 有形状更有意义,所以我会选择ShapeColor.