我有基于Flex的消费者website,我希望根据随机和其他标准更改各种外观类型设置,然后跟踪这些设置以获得最多销售额的结果。
例如,我可能会完全切换出主页,根据人们的来源显示不同的内容。我可能会显示或隐藏某些功能,或更改某些文字。我可能会改变的事情尚未定义,可能会变得非常复杂。
我想设计最灵活的数据库架构,但它必须高效且易于搜索。目前,我有一个“SiteVisit”表,其中包含有关每个不同访问者的信息。
我希望在每个设置的单个表与列之间找到正确的平衡,以及只包含键值对的表。
有什么建议吗?
答案 0 :(得分:3)
好的,这非常棘手。我之所以这么说是因为你要求两件事:
解决方案将是妥协。你必须明白这一点。
假设您有用户表:
+----------------
| 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)CustomProperty表 在此解决方案中,您有一个包含所有自定义属性的表。
+----------------
| CustomPropertyEnum
+----------------
| PropertyId (PK)
| Name of type string
+----------------
+----------------
| CustomProperty
+----------------
| PropId (PK)
| PropertyId (FK)
| UserId (FK)
| Value of type string
+----------------
在此解决方案中,您将所有自定义属性存储在一个表中。您还有一个特殊的枚举表,可以更有效地查询数据。缺点是您将在查询操作期间经常连接表。
自己选择。我会根据您的工作量决定2到3之间(最可能是3,因为它更容易)。
答案 1 :(得分:1)
这是使用NoSQL数据库的经典案例。它可以用于轻松存储各种键值对,无需任何预定义模式。