假设我有两个表:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
我应该如何称呼将颜色映射到形状的表格?
Table: ???
Columns: ColorId, ShapeId
假设我有两个表:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
我应该如何称呼将颜色映射到形状的表格?
Table: ???
Columns: ColorId, ShapeId
计算机科学中只有两件难事:缓存失效和命名事物
-- Phil Karlton
为代表多对多关系的表起一个好名字可以使关系更易于阅读和理解。有时候找到一个好名字并不容易,但通常值得花费一些时间来思考。
例如:Reader
和 Newspaper
。
Newspaper
有很多 Readers
,而一个 Reader
也有很多 Newspapers
。
你可以称这个关系为 NewspaperReader
,但像 Subscription
这样的名称可能更能传达出表的意义。
如果以后要将表映射到对象,则名称 Subscription
更符合惯用语法。
命名 many-to-many
表的惯例是连接涉及到该关系的两个表的名称。在你的情况下,ColourShape
是一个明智的默认选择。话虽如此,我认为 Nick D 提出 了两个很棒的建议: Style
和 Texture
。
那么如何选择 ColorShapeMap、Style 或 Texture 呢?
给表格起一个你喜欢的、信息充分的名字:
COLOR_SHAPE_XREF
从数据模型的角度来看,这个表叫做关联/交叉引用表。我习惯在表名结尾添加_XREF
以便于识别关系。
有趣的是,大约一半的答案给出了一个通用术语,用于实现多对多关系的任何表,另一半的答案则建议为此特定表提供名称。
我通常将这些表称为交集表。
在命名惯例方面,大多数人都给出了一个由多对多关系中的两个表组成的合成名称。因此,在这种情况下,可以选择"ColorShape
"或 "ShapeColor
"。但我觉得这看起来很不自然,很尴尬。
Joe Celko在他的书"SQL编程风格"中建议以某种自然语言方式命名这些表。例如,如果形状是通过颜色上色的,则将表命名为ColoredBy
。然后,您可以拥有一张图表,其读起来更加自然,类似于这样:
Shape <-- ColoredBy --> Color
相反地,你可以说一个 Color 给一个 Shape 上色:
Color <-- Colors --> Shape
但这看起来中间的表格与使用复数命名规则的Color
是同一物品。太令人困惑了。
可能最清晰的方式是使用ColoredBy
的命名规则。有趣的是,使用被动语态让命名规则更加清晰。
hasColour
/ColouredBy
是用来做什么的?使用 DESCRIBE
来查找关系违背了命名的目的。 - OMG PoniesShapeHasColor
和TextHasColor
? - devuxerColorToShape
ColorToShapeMap
我曾经与一些称其为“连接表”的数据库管理员合作。
除非关系具有显式的领域特定名称,否则Colour_Shape是相当典型的。
Colour_Shape_Colour
和 Colour_Shape_Shape
这样的糟糕命名。 - Dan Bechard我通常听到这被称为连接表。我根据它连接的内容来命名表格,所以在你的情况下可以使用ColorShape或ShapeColor。我认为形状拥有颜色比颜色拥有形状更有意义,所以我会选择ShapeColor
。