【发布时间】:2018-08-31 11:28:19
【问题描述】:
我正在开始一个新项目,但在为数据库找到合适的设计时遇到了一些麻烦。
数据库域具有许多彼此相似但具有多个不同字段的实体。这个字段可以随着时间的推移而改变,其中许多是枚举。目标是设计数据库,使其可以通过管理仪表板控制字段及其可能的值。
我的想法是有一个实体Super entity 存储所有实体之间的所有公共字段,有一个EntityCharacteristics 将具有外键的实体特征存储到Characteristic 表中,该表将存储有关特征的信息这样就可以使用这些信息创建一个表单字段,想象一下
CharacteristicName: Age
Placeholder: Enter your age...
InputType: text
CharacteristicType: Integer
需要可以为选择框的 InputType 存储可能的值,例如,它是一个类似枚举的类型。
此外,SuperEntity 将有一个 entity_type 字段,该字段将连接到 EntityType 表,并且此表将连接到 PossibleEntityCharacteristics,它将可能的特征存储到某个实体类型。
我的问题是我应该如何将值存储在EntityCharacteristics 中,因为它们可以是不同的类型、布尔值、文本、整数、枚举等。以及如何使用 Json 将可能的值存储在枚举类型中?或者与某个特征的另一个可能值表一起使用?我如何确定插入到 EntityCharacteristics 中的值是正确的类型并且包含枚举的可能值?
也许这根本不是一个糟糕的设计,我不应该这样想,而是将数据存储在具有许多字段的普通表中。但是我想提供一个解决方案,可以随时轻松更改不同相似实体的现有字段和字段值,并且必须更改表模式似乎不是一个好主意。我计划用支持 Json 的 PostgreSQL 来实现这个,它可能适合这里的某个地方,但是由于我从未在 Sql 中使用过这种数据类型,所以我不知道这是否是个好主意。
我想知道您对此的看法,在此先感谢您。
注意:我正在考虑的数据库模型类似于 https://stackoverflow.com/a/7423459,但稍微复杂一些,并且没有嵌套。
【问题讨论】:
-
嗨。这是一个常见问题解答。您正在处理 sql/数据库子类型化/继承;了解如何做到这一点。而且您建议通过 EAV 对其进行建模;了解一下。 (您还没有表现出需要如此通用和 DIY,而不仅仅是使用 DDL 委托给 DBMS。)
标签: sql postgresql database-design