【发布时间】:2015-06-27 10:56:00
【问题描述】:
我正在设计 mall 和 brands 之间的关系,可在商场购买。
品牌数量是固定的。但是,未来可能会增加。现在,商场可能会展示一些/所有品牌。
我的问题是:
我是否应该像这样将不同品牌作为布尔属性添加到 mall 表中:
mall
----------------------------------------------------------------------------
mall_id | mall_name | peter_england | turle | adidas | puma |
----------------------------------------------------------------------------
1 xyz false true true false
2 abc true false true true
----------------------------------------------------------------------------
或
在mall 和一个新的brand 表之间创建 N:M 关系,如下所示:
mall mall_brand brand
------------------------- --------------------- --------------------------
mall_id | mall_name | mall_id | brand_id brand_id | brand_name
------------------------- --------------------- --------------------------
1 xyz 1 2 1 peter_england
2 abc 1 3 2 turtle
------------------------- 2 1 3 adidas
2 3 4 puma
2 4 --------------------------
---------------------
我个人觉得第二个更灵活,因为它只存储true 值。此外,它还为我提供了将来为各个品牌添加额外属性的条件。此外,添加新品牌也很巧妙。
编辑:
还考虑一种情况,每个商场都存在所有这些品牌,我们不是存储布尔值,而是存储每个品牌每天销售的平均服装数量的浮点值,如下所示:
mall
----------------------------------------------------------------------------
mall_id | mall_name | peter_england | turle | adidas | puma |
----------------------------------------------------------------------------
1 xyz 10.4 21.3 13.7 7.6
2 abc 10.7 25.5 11.4 8.1
----------------------------------------------------------------------------
在这种情况下,我应该将它们存储为属性,还是像以前一样创建新表?
【问题讨论】:
-
我几乎总是更喜欢第二个正确标准化的模型。它更加灵活且易于使用。
-
还有一个查询:如果所有品牌始终为
true,但存储任何其他数据类型,例如puma_avg_shoe_price、adidas_avg_shoe_price、reebok_avg_shoe_price等等,我们仍然会选择第二个设计? -
请在每个帖子中提出一个问题,而不是 3 个。请通过编辑而不是 cmets 进行澄清。