数据库架构,用于跟踪网站中的随机设置以进

时间:2008-10-01 00:08:38

标签: database-design schema customization entity-relationship

我有基于Flex的消费者website,我希望根据随机和其他标准更改各种外观类型设置,然后跟踪这些设置以获得最多销售额的结果。

例如,我可能会完全切换出主页,根据人们的来源显示不同的内容。我可能会显示或隐藏某些功能,或更改某些文字。我可能会改变的事情尚未定义,可能会变得非常复杂。

我想设计最灵活的数据库架构,但它必须高效且易于搜索。目前,我有一个“SiteVisit”表,其中包含有关每个不同访问者的信息。

我希望在每个设置的单个表与列之间找到正确的平衡,以及只包含键值对的表。

有什么建议吗?

2 个答案:

答案 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数据库的经典案例。它可以用于轻松存储各种键值对,无需任何预定义模式。