假设我有两个表:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
我该如何称呼将颜色映射为形状的表?
Table: ???
Columns: ColorId, ShapeId
Shape2Color
,ShapeXColor
,ShapeColorLink
。
假设我有两个表:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
我该如何称呼将颜色映射为形状的表?
Table: ???
Columns: ColorId, ShapeId
Shape2Color
,ShapeXColor
,ShapeColorLink
。
Answers:
只有两个在计算机科学坚硬的东西:缓存失效和命名的事情
- 菲尔Karlton
为代表many-to-many
关系的表命名一个好名字可以使关系更容易阅读和理解。有时候,找到一个好名字并不容易,但通常值得花一些时间思考。
例如:Reader
和Newspaper
。
一个Newspaper
有很多Readers
,一个Reader
有很多Newspapers
您可以调用该关系,NewspaperReader
但是像这样的名称Subscription
可能会更好地传达表的含义。
Subscription
如果以后要将表映射到对象,则名称也更惯用。
many-to-many
表的命名约定是关系中涉及的两个表的名称的串联。ColourShape
在您的情况下将是明智的默认选择。也就是说,我认为Nick D 提出了两个不错的建议:Style
和Texture
。
有趣的是,答案的一半为实现多对多关系的任何表提供了通用术语,而答案的另一半则为该特定表建议了一个名称。
我通常将这些表称为交集表。
在命名约定方面,大多数人给出的名称是多对多关系中两个表的混合物。因此,在这种情况下为“ ColorShape
”或“” ShapeColor
。但是我发现这看起来是人为的和尴尬的。
Joe Celko在他的书“ SQL Programming Style”中建议以某种自然语言方式命名这些表。例如,如果Shape由Color着色,则将table命名ColoredBy
。然后,您可能会得到一个或多或少自然地读取的图表,如下所示:
Shape <-- ColoredBy --> Color
相反,您可以说Color为Shape着色:
Color <-- Colors --> Shape
但这看起来中间表Color
与复数命名约定是同一回事。太混乱了。
也许最清楚地使用ColoredBy
命名约定。有趣的是,使用被动语音使命名约定更加清晰。
HasColor
可能是使用自然语言的交叉表的另一个可能名称。
hasColour
/ 是ColouredBy
为了什么?它打败了命名的目的,即不得不使用它DESCRIBE
来查找关系。
ShapeHasColor
和TextHasColor
?
只要您喜欢该表,只要它能提供参考即可:
COLOR_SHAPE_XREF
从模型角度来看,该表称为联接/对等/交叉引用表。我一直养成_XREF
在结束时使关系变得明显的习惯。
映射表通常称为映射表。
ColorToShape
ColorToShapeMap
To
在名称中使用的想法。如果您的Shape具有HighlightColor怎么办。如果调用它ShapeHighlightColor
,则是将ShapeHighlight映射到颜色还是将Shape映射到突出显示颜色,这有点模棱两可。因此,ShapeToHighlightColor
可能会更清楚。
我曾与DBA合作,称其为联接表。
Colour_Shape是相当典型的-除非该关系具有明确的域特定名称。
Colour_Shape_Colour
和讨厌的名称Colour_Shape_Shape
。
要么 Bridge Table
要么 Join Table
要么 Map Table
要么 Link Table
要么 Cross-Reference Table
当我们使用多对多关系时,这是有用的,其中两个表中的键构成联结表的复合主键。
我建议使用实体名称的组合,并将它们放在复数形式。因此,该表的名称将表示“多对多”连接。
在您的情况下:
颜色+形状=颜色形状
我也听说过术语“ 关联表”。
表格的名称可能ColorShapeAssociations
意味着每一行都代表该颜色与该形状之间的关联。行的存在意味着颜色以该形状出现,并且该形状以该颜色出现。具有特定颜色的所有行将是与该颜色关联的所有形状的集合,而特定形状的行将是该形状进入的所有颜色的集合...
通常,大多数数据库对索引,主键等都有某种命名约定。在PostgreSQL中,建议使用以下命名:
您的表是我的链接表。为了与上面的命名保持一致,我将选择以下内容:
在表对象列表中,链接的表将在tablename1之后。在视觉上这可能更有吸引力。但是您也可以像其他人建议的那样选择描述链接目的的名称。这可能有助于使id列的名称简短(如果您的链接必须具有其自己的命名id并在其他表中引用)。
很难回答如此随意的问题,但是我倾向于使用Tosh的想法,即以实际领域中的某事命名,而不是对基础关系进行一般描述。
这种表经常会演变为领域模型更丰富的表,并且将具有链接的外键之上和之外的其他属性。
例如,如果您除了颜色之外还需要存储纹理,该怎么办?扩展SHAPE_COLOR表以保留其纹理似乎有点时髦。
另一方面,要根据您今天的需求做出明智的决定,并准备在以后引入其他需求时进行重构,还有很多话要说。
话虽如此,如果我了解到以后会引入其他类似表面的特性,我将其称为SURFACE。如果没有,我将它命名为SHAPE_COLOR或类似的东西就没有问题,然后继续处理更紧迫的设计问题。
我会用r_shape_colors
还是r_shape_color
要看它的意思。在这种情况下
r_
将替代xref_