描述数据库设计中外键的用途

时间:2013-04-02 12:09:03

标签: database-design foreign-keys naming-conventions

我正在使用MySQL Workbench设计数据库并定义了许多外键。

我很好奇是否有描述这段关系目的的最佳实践。

目前,所有外键列都被命名为%table%_%col%。我喜欢这个,因为它几乎告诉你如何加入表格。虽然这虽然描述了两个表之间的联系,但它没有描述这种关系的目的是什么。

例如,外键可能表示父母或子女关系,或所有者,或目的地或来源。

我可以在索引名称中描述目的,而不是列,或索引的注释。但是,例如,如果我坚持使用%table%_%col%作为列名,我就无法连接到同一个表两次(即一个FK可能用于创建资源的人,另一个用于编辑它的人) 。

那么列名是否应该始终描述目的而不是链接?

有最好的做法吗?

1 个答案:

答案 0 :(得分:0)

仅使用外键表示引用的表描述了不同的对象,不同的概念。外键只是一个指针,使用外键的目的永远不止于此。这类似于在类中具有指针类型字段而不是直接包括所有引用的其他对象的字段。如果每一行(每个实体)只有一个父项和一个子项,则不必为每个实体包含两个方向,而是指定是否存储对父项或子项的引用。

在一对多关系(例如,多个子实体到单个父级)的情况下更加简单,因为每个子节点都有对其父节点的引用,但是在SQL中没有定义复合列和列表类型,父母不能包含其子女的名单。