在关系数据库中使用用户定义的组件存储实体。

我正在努力寻找存储具有用户定义字段的实体的最佳方法。我希望能够对这些字段进行查询,所以我觉得NoSQL可能不是最好的方法。不断的模式迁移似乎很麻烦,尤其是不同的用户可能希望在类似的实体上有不同的字段。

例如,假设我们有一个实体代表一个村庄。这个村庄有一个名字(西镇),一个类型(村庄),一个人口(114)。用户可能想给村庄添加自己的属性,比如说,昵称。这个在前期是不知道的,其他村子可能不需要。

我想到的最好的技术是为实体建立一个表,然后为实体的 “组件 “建立一个单独的表,包括:组件的id,它所在实体的外键,组件的名称,以及它的值。

所以,例子中的村子会存在为。

Table 1 - Entity
ID
1

Table 2 - String Components
ID ENTITY_ID NAME    VALUE
1  1         name    West Town
2  1         type    village

Table 3 - Integer Components
ID ENTITY_ID NAME       VALUE
1  1         population 114

然后,如果用户想在村子里添加一个 “昵称”, 他们可以按下一个按钮,选择一个字符串组件, 称它为 “昵称”,并给它一个 “韦森 “的值。

Table 2 - String Components
ID ENTITY_ID NAME      VALUE
1  1         name      West Town
2  1         type      village
3  1         nickname  Wesson

然后,当实体需要被显示时, 我们查询组件表的实体ID,并显示信息。

name:       West Town
population: 114
type:       village
nickname:   Wesson

这很疯狂吗?这感觉既有点像在关系数据库中表示一个可变模式的优雅方式,又像试图绕过关系数据库的整个要点。有没有更好的方法?

解决方案:

回答我自己的问题。这似乎一般都是使用一种称为 “实体-属性-值 “的模式来解决,这和我的建议类似。

实体表可以更丰富一些,把所有实体的共同信息也存储起来,比如 “名称”,也许还可以把一个外键存储到 “entity_type “表中。

最简单的是,属性表可以像上面一样,每个数据类型都有一个。

https:/en.wikipedia.orgwikiEntity%E2%80%93attribute%E2%80%93value_model。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何让我的Ionic Android应用实现在线和离线功能?

2022-9-13 13:45:32

未分类

Chart.js如何从json中插入值?

2022-9-13 13:45:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索