SQL 列表项的数据库架构最佳实践 table
SQL DB schema best practice for List item table
我有一个 table 说 Table1
其中有以下列
1. Id
2. Name
3. TransportModeId
4. ParkingId
5. ActivityId
第 3、4、5 列是外键,所有三个都是简单列表 tables,其中包含以下列
1. Id
2. Item
为简单起见,我显示了 3 table,否则我的实际模式包含将近 25 个列表 table。
最佳实践应该是什么
选项 1.
将所有列表 table 分开,这将创建 25 tables 但另一方面我将有一个干净的模块化模式
选项 2.
使用自连接创建一个 table 并添加 table 中的所有项目,其中 ParentId
null 将代表 table 的名称并且它可以在其中有多个引用其他 tables 如上所述,它必须保存在某种通用模块中
谢谢
选项 1 是设计系统时通常采用的方法,到最后 user/implementator 不应该是非常可配置的。它有几个重要的优点,其中两个:
当您需要向任何枚举添加额外的属性时(例如将停车位置添加到 Parking 枚举),这非常简单,不会产生额外的问题。
它使用关系数据库引擎的本机算法来优化速度。
关于选项 2:
它是一个叫做 Generalization 的东西。您采用具有相似属性(方法)的更多类型,并创建具有适合不同用途的结构的 class/table。
正如您所说,自我引用对于选项 2 来说不是一个好主意,而是引用另一个 EnumerationType
table 包含类型名称,如 Parking
, Activity
等id.
如果您需要允许最终用户在您的应用中自行配置属性,则使用此方法可能很有意义。但否则,当您发现不同的枚举 table 需要具有不同的结构时,可能会给您带来麻烦。
我有一个 table 说 Table1
其中有以下列
1. Id
2. Name
3. TransportModeId
4. ParkingId
5. ActivityId
第 3、4、5 列是外键,所有三个都是简单列表 tables,其中包含以下列
1. Id
2. Item
为简单起见,我显示了 3 table,否则我的实际模式包含将近 25 个列表 table。
最佳实践应该是什么
选项 1. 将所有列表 table 分开,这将创建 25 tables 但另一方面我将有一个干净的模块化模式
选项 2.
使用自连接创建一个 table 并添加 table 中的所有项目,其中 ParentId
null 将代表 table 的名称并且它可以在其中有多个引用其他 tables 如上所述,它必须保存在某种通用模块中
谢谢
选项 1 是设计系统时通常采用的方法,到最后 user/implementator 不应该是非常可配置的。它有几个重要的优点,其中两个:
当您需要向任何枚举添加额外的属性时(例如将停车位置添加到 Parking 枚举),这非常简单,不会产生额外的问题。
它使用关系数据库引擎的本机算法来优化速度。
关于选项 2: 它是一个叫做 Generalization 的东西。您采用具有相似属性(方法)的更多类型,并创建具有适合不同用途的结构的 class/table。
正如您所说,自我引用对于选项 2 来说不是一个好主意,而是引用另一个 EnumerationType
table 包含类型名称,如 Parking
, Activity
等id.
如果您需要允许最终用户在您的应用中自行配置属性,则使用此方法可能很有意义。但否则,当您发现不同的枚举 table 需要具有不同的结构时,可能会给您带来麻烦。