存储笛卡尔积导致SQL?

时间:2011-09-21 13:31:29

标签: php mysql sql

感谢阅读,我希望这是有道理的!我正在尝试修改定制的CMS,它提供不同的产品选项,并允许您根据这些选项的组合设置各种属性。这些都是从mySQL数据库中提取的。例如,T恤可能有:

Colour         Size       
------         ----
Red            Small
Red            Medium
Blue           Small
Blue           Medium

每种颜色和大小都有一个唯一的ID,因此红色= 1,蓝色= 2,小= 3,中等= 4.颜色和大小都有父ID,所以color = 1,size = 2。

目前,我将字符串存储在数据库中的数据库表中,该数据库表中标识了每个组合(例如,Red + small将是& 1 = 1& 2 = 3)。然后,该字符串将这些选项组合与各种属性相关联:价格,股票代码等。

然而,当我们想要在混合中添加一个新的选项组时,问题出现了,比如袖子长度。目前,这意味着必须通过字符串并将其更改为还包括新选项。这似乎是一种非常低效且冗长的方式!

所以(最终!)我的问题是 - 我有更好的方法吗?我需要确保可以添加的选项组数量没有实际限制,并且可以随时添加新的选项组。

提前感谢您的帮助。

斯图尔特

1 个答案:

答案 0 :(得分:1)

我会反击而不是问你,你为什么要首先存储它?

笛卡尔积是一个控制器问题,而不是域模型。您的域模型(您的数据库)应该只关注以正常方式保存数据(或尽可能接近),让数据库系统根据需要进行连接(在SQL中inner join),这就是他们的'首先要做好优化。