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

Database design 描述数据库设计中外键的用途,database-design,foreign-keys,naming-conventions,Database Design,Foreign Keys,Naming Conventions,我正在使用MySQL Workbench设计一个数据库,并定义了许多外键 我很好奇,是否有一个最佳实践来描述这段关系的目的 当前,所有外键列的名称均为%table%\uuu%col%。我喜欢这个,因为它告诉你如何加入表格。虽然这描述了两个表之间的链接,但并没有描述关系的用途 例如,外键可能表示父关系或子关系、所有者、目标或源 我可以用索引的名称来描述目的,而不是列或索引的注释。但是,例如,如果我坚持使用%table%\uuu%col%作为列名(即,一个FK可能用于创建资源的人,另一个FK用于编辑

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

我很好奇,是否有一个最佳实践来描述这段关系的目的

当前,所有外键列的名称均为%table%\uuu%col%。我喜欢这个,因为它告诉你如何加入表格。虽然这描述了两个表之间的链接,但并没有描述关系的用途

例如,外键可能表示父关系或子关系、所有者、目标或源

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

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


是否有最佳实践?

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


如果是一对多关系(例如,多个子实体到单个父实体),则更为简单,因为每个子实体都有对其父实体的引用,但由于SQL中未定义复合列和列表类型,父实体不能包含其子实体的列表。

我的父/子实体就是一个糟糕的例子。但我想问的是,如何在设计中描述关系的目的,而不是外键是什么。你的意思是为什么人们决定用外键表示表与表之间的现有关系?不,不。这是关于命名约定。如果为users表创建FK,则可以将列命名为“users\u id”。这告诉我们存在一种关系,但它的名称并不能表明这种关系的目的是什么。所以,当不熟悉DB的人看到它时,他们会看到有一种关系,但这种关系的意义可能并不明显。但是,如果列名称是“owner”,而不是“user\u id”,那么他们就会知道,但这打破了使用%table%\u%col%命名列的惯例。很抱歉,我不知道您的意思。事实上,作为一个干净的程序员,我会选择“所有者”。查看DB模式时,无论是图形还是文本,FK关系都可以显示,而不管键的名称如何。