在 table 中存储具有动态属性集的实体(并使用固定列或键值 tables)

Storing entities with dynamic set of properties in a table (and using fixed columns or key-value tables)

我想将人们的信息存储在数据库中 (table)。每个人都可以拥有一组不同的属性。我想存储所有这些属性。但是创建固定数量的列并不能使我的应用程序可扩展。

因此,另一种方法是将这些值存储在键值对 table 中,这会导致 table 具有几列但大量行。

所以我想知道是否有另一种存储这些信息的方法,而且查询起来也方便快捷。

您使用的是什么数据库。

一个解决方案(如果您的数据库支持)可以以 XML 格式存储此人的信息。

无论您的数据在概念上是如何组织的,让数据变快都是 DBSM 的工作,因此通常您不必担心查询是否快。

第一个也是最明显但也是最不推荐的方法是使用 alter table,这将允许您稍后修改 table。 更推荐的方法是将您的 table 分解为许多 table 并将它们与主键相关联。

所以你的人可能有作为主键的社会保障,以及属性名称、姓氏、街道地址、街道名称、邮政编码

然后你将 table 分解为(伪代码)

Table 人物:社交

Table 地址:社交,street_address,street_name,postal_code

Table 信息:社交,first_name,last_name

然后你可以加入他们

Select Person.social_security, first_name, last_name [...etc...] from Person, Address, Info where Person.social = Address.social and Person.social = Info.social

然后您可以根据需要继续添加更多 table。在其他 table 中有很多行没有问题,而在 Person 中只有几行,这是推荐的方法,因为如果一个人没有地址但有地址,它会减少空白空间的数量有名字和姓氏,以及许多其他原因。

如果您无法使用 SQL 服务器完成此任务,您可以利用它的 XML 支持。值得注意的是,您可以使用 XPath。

Using XPath Queries in SQLXML 4.0