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 不应该是非常可配置的。它有几个重要的优点,其中两个:

  1. 当您需要向任何枚举添加额外的属性时(例如将停车位置添加到 Parking 枚举),这非常简单,不会产生额外的问题。

  2. 它使用关系数据库引擎的本机算法来优化速度。

关于选项 2: 它是一个叫做 Generalization 的东西。您采用具有相似属性(方法)的更多类型,并创建具有适合不同用途的结构的 class/table。

正如您所说,自我引用对于选项 2 来说不是一个好主意,而是引用另一个 EnumerationType table 包含类型名称,如 ParkingActivity等id.

如果您需要允许最终用户在您的应用中自行配置属性,则使用此方法可能很有意义。但否则,当您发现不同的枚举 table 需要具有不同的结构时,可能会给您带来麻烦。