数据库规范化和用户定义的数据存储

时间:2012-06-30 12:18:38

标签: database django postgresql database-design

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

以下是我正在考虑部署的数据库结构,并且想知道在完整性和可伸缩性(以及您能想到的任何其他 -ity的)方面的积极和消极是什么

Original Diagram

修改 (对不起,这就是我的意思)

New Diagram

我在最后15分钟一直盯着这个,我知道(红色箭头在哪里)会导致重复,因此你必须进行完整性检查。但我只是不明白我还能做些什么。

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

2 个答案:

答案 0 :(得分:2)

此模型在数据库中称为数据库,并不好。虽然有时候不可能首先检查你是否真的需要它,而你的数据库确实是这个工作的正确数据库。

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

答案 1 :(得分: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作为您的文本值,并且(除非您保留流)将记录与键入的值一起写入该字段。这将意味着保持记录的两次值(更多的是更新等的痛苦),但它将使查询更容易,同时报告(您只需要显示值的任何内容)。

注意:也可以提取所有产品共有的东西并将它们放入产品表中。例如,所有产品很可能都有名称,建议价格等。