好的,这很棘手。我之所以这么说是因为您要求两件事:
- 宽松的存储库架构,以便您可以存储各种数据并更改以后动态保存的内容
- 固定的数据库架构,以便您可以有效地查询数据
解决方案将是妥协。你必须明白这一点。
假设您有 User 表:
+----------------
| User
+----------------
| UserId (PK)
| ...
+----------------
1) XML blob 方法
您可以将数据作为博客(大 XML)保存到表中(实际上是一个属性包),但查询(过滤)将是一场噩梦。
+----------------
| CustomProperty
+----------------
| PropId (PK)
| UserId (FK)
| Data of type memo/binary/...
+----------------
优点是您(业务逻辑)拥有架构。这同时也是该解决方案的缺点。另一个巨大的缺点是查询/过滤将非常困难和缓慢!
2) 每个属性的表
另一种解决方案是为每个属性(主页等)制作一个特殊的表。该表将包含每个用户的价值(基于 FK 的对 User 表的关系)。
+----------------
| HomePage
+----------------
| HomePageId (PK)
| UserId (FK)
| Value of type string
+----------------
这种方法的优点是您可以非常快速地查看该属性的所有值。缺点是您将拥有太多表(每个自定义属性一个),并且您会在查询操作期间经常连接表。
3) 自定义属性表
在此解决方案中,您有一个包含所有自定义属性的表。
+----------------
| CustomPropertyEnum
+----------------
| PropertyId (PK)
| Name of type string
+----------------
+----------------
| CustomProperty
+----------------
| PropId (PK)
| PropertyId (FK)
| UserId (FK)
| Value of type string
+----------------
在此解决方案中,您将所有自定义属性存储在一个表中。您还有一个特殊的枚举表,可以让您更有效地查询数据。缺点是在查询操作过程中会经常连接表。
自己选择。我会根据您的工作量在 2 和 3 之间做出决定(很可能是 3,因为它更容易)。