我应该给将两个表映射在一起的表起什么名字?

179

假设我有两个表:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

我应该如何称呼将颜色映射到形状的表格?

Table: ???
Columns: ColorId, ShapeId

ColorShape 和 ShapeColor 是对称性的别名。 - LukLed
4
我刚刚发现了一个之前没有看到过的类似问题:https://dev59.com/IXI-5IYBdhLWcg3wm5zN。那个帖子中还有一些其他的想法,如“Shape2Color”、“ShapeXColor”和“ShapeColorLink”。 - devuxer
3
如果有一种命名连接表的标准,那么这个问题就不会是基于个人观点的了。这将成为回答这个问题的方法。关闭这个问题将阻止像我这样的人了解是否存在标准的命名连接表的方式。请重新考虑一下 - 关闭它的人... - Lealo
2
我写了一篇关于如何命名连接表的博客文章:https://world.hey.com/jdmo/how-to-name-your-junction-tables-3735fdc9 - mollerhoj
24个回答

4

Intermediate TableJoin Table

我会把它命名为"ColorShapes"或"ColorShape",根据您的喜好。


4
我还听说过“关联表”这个术语。
你的表的名称可能是ColorShapeAssociations,意思是每一行表示该颜色和该形状之间的关联。行的存在意味着该颜色有该形状,并且该形状有该颜色。具有特定颜色的所有行将是该颜色与所有相关形状的集合,而具有特定形状的行将是该形状所包含的所有颜色的集合...

1
但是你会给实际的表格取什么名字呢? - devuxer
2
这取决于表格所描述的内容。如果它说“任何橙色的东西必须是菱形”,“任何紫色的东西必须是圆形”等等,那么你可能会称其为一个名称(例如“形状颜色”,或许)。如果定义较为宽泛——为形状指定已知颜色,允许单个形状出现多次——则可能使用“形状颜色映射”。 - Jonathan Leffler

3
我个人喜欢的一种连接表格的约定是“颜色_v_形状”,我听到有人口语称之为“对抗表格”。一眼就可以清楚地看出该表格表示多对多的关系,有助于避免那种(虽然很少见)令人困惑的情况,即当您尝试连接两个单词以形成一个复合词时,例如“黄油”和“牛奶”可能会变成“黄油牛奶”,但如果您还需要表示一个名为“酪乳”的实体呢?
用这种方式,您将拥有“黄油_v_牛奶”和“酪乳” - 没有混淆。
此外,我认为原问题中有一个Foo Fighters的参考。

3
一般来说,大多数数据库都有某种索引、主键等的命名规范。在PostgreSQL中,建议采用以下命名方式:
  • 主键:tablename_columnname_pkey
  • 唯一约束:tablename_columnname_key
  • 独占约束:tablename_columnname_excl
  • 其他目的的索引:tablename_columnname_idx
  • 外键:tablename_columnname_fkey
  • 序列:tablename_columnname_seq
  • 触发器:tablename_actionname_after|before_trig

对于我而言,你的表是一个链接表。为了符合上述命名方式,我会选择以下命名:

  • 链接表:tablename1_tablename2_lnk

在表对象列表中,链接表将位于tablename1之后。这可能更具视觉吸引力。但你也可以选择一个描述链接目的的名称,就像其他人建议的那样。这可能有助于保持id列的名称简短(如果你的链接必须有自己的命名id,并被其他表引用)。

  • 或者,链接表可以命名为:purposename_lnk

2
好久不见了,老朋友——匈牙利命名法。 - Dan Bechard

3

"多对多" 表。我会称之为 "颜色形状" 或反过来。


1

可能只是ColoredShape吗?

我不确定我理解问题了。这是关于特定情况还是你在寻找一般指导方针?


1

我一直对术语“汉堡桌”有好感。不知道为什么,听起来很不错。

哦,如果哪个表更常用,我会称其为ShapeColor或ColorShape。


1

回答这样任意的问题很困难,但我倾向于采用tosh的想法,将其命名为实际领域中的某个东西,而不是一些基本描述底层关系的通用名称。

通常,这种表格会演变成领域模型中更丰富的内容,并且会承担超出链接外键之上的其他属性。

例如,如果您需要存储纹理以及颜色,怎么办?将SHAPE_COLOR表扩展以容纳其纹理可能看起来有点奇怪。

另一方面,也有人认为,根据今天的需求做出明智的决策,并准备在引入其他要求时进行重构,这也是有道理的。

总之,如果我知道将来会引入类似表面的属性,我会称其为SURFACE。如果没有,我就没有问题称其为SHAPE_COLOR或类似的名称,并继续解决更紧迫的设计问题。


0
除了开发人员艺术所说的内容之外,
ColorShape

会是一个通常的命名约定。在实体关系图中,它将是一个关系。


0

称之为交叉引用表。

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接