【问题标题】:How to dynamically extend the datamodel?如何动态扩展数据模型?
【发布时间】:2015-12-14 04:05:21
【问题描述】:
我有一个带有一张表的 PostgreSQL 数据库。我的应用程序的用户可以添加新的数据源(例如 CSV 文件)来扩展基础数据。在应用程序用户定义他的新数据。
我的问题是:如何为这种情况制作数据模型?
我需要在数据库中为这些新数据创建新表,还是在现有表中添加新列?用户可以添加多个新数据源。
例子:
我有员工表。用户添加带有付款的数据源和带有家庭信息的数据源。当我不知道新数据的格式时,如何将所有这些数据存储在数据库中?
【问题讨论】:
标签:
database
postgresql
data-modeling
【解决方案1】:
为您提供几个选项。
1) 使用无模式数据存储。如果你被困在 PostgresSQL 上,他们有一个可以工作的 json 数据类型。否则,像 Couchbase 或 MongoDB 这样的文档数据库就可以解决问题。这样您就可以即时添加新属性。
2) 如果您出于某种原因需要使用关系模式,请使用实体-属性-值 (EAV) 模式。这是一个示例,说明如何通过在表 2 和表 3 中插入行来即时添加薪水和家庭成员。(但我强烈推荐选项 1。)
表 1:员工
ID = 111,姓名 = “John”,出生日期 = “07/21/1987”等)
表 2:Employee_Attribute
ID = 1,姓名 = “薪水”,数据类型 = “金钱”
ID = 2,名称 = “家庭成员名称”,DataType = “字符串”
表 3:Employee_Attribute_Value
Employee_ID = 111,Attribute_ID = 1,Value = "78000"
Employee_ID = 111,Attribute_ID = 2,Value = "Sarah"