1

我希望让我的 Web 应用程序的用户定义他们自己的产品属性,然后为这些产品输入数据。我发现这种技术被称为n(th) normal form.

以下是我目前正在考虑部署的数据库结构,并且想知道在完整性和可扩展性方面的正面和负面影响(以及您能想到的任何其他-ity )

原图

编辑 (对不起,这就是我的意思)

新图表

在过去的 15 分钟里,我一直在盯着它看,我知道(红色箭头所在的位置)会导致重复,因此您必须进行完整性检查。但我只是不明白我想要的其他东西怎么做。

产品数量不超过 10 个。变量数量不超过 200(每个产品最多 20 个)。产品实例的数量不会超过 100,000,因此最大大小pVariable_data不会超过 200 万

4

2 回答 2

2

这种模型称为数据库中的数据库,并不好。尽管有时不可能首先检查您是否真的需要它,并且您的数据库确实是适合这项工作的数据库。

使用 PostgreSQL,您可以使用:http ://www.postgresql.org/docs/8.4/static/hstore.html ,这是针对此类问题的标准化解决方案。

于 2012-06-30T12:36:35.060 回答
0

假设 pVariable 更像是一种 pVariable 类型,请删除对 product_fk 的引用。这意味着您需要在该表中为每个产品记录创建一个新条目。也许尝试这样的事情:

Product(id, active, allow_new)

pVariable_type(id, name) 

pVariable_data(id, product_fk, pvariable_fk, non_typed_value, bool, int, etc)

我将使用 non_typed_value 作为您的文本值,并且(除非您保留流)将记录与键入的值一起写入该字段。这意味着将记录的值保留两次(并且在更新等方面更加痛苦),但它将使查询和报告(您只需要显示其值的任何内容)更容易。

注意:将所有产品共有的任何东西都拉出来并将它们放在产品表中也是一种想法。例如,所有产品很可能都有名称、建议价格等。

于 2012-06-30T12:40:19.317 回答