最小化MySQL中的表数?

时间:2010-09-18 22:40:23

标签: sql mysql database e-commerce

关于在数据库中组织数据的好方法的基本问题。假设我有一个多个商店的搜索网站。每家商店都有许多产品。组织价格和库存数据的最佳方法是什么?我看到两种方法:

  1. 每个商店的表格,第一列或第二列标识产品,库存列和价格列
  2. 库存表和价格表,两者中的第一列标识产品,每个商店单独列
  3. 第一个选项似乎更方便,但会导致更多表格。在性能方面,最小化表的数量还是不重要?

    另外,对于第一个选项,我应该将这些数据保存在单独的数据库中,还是可以将通用产品和商店详细信息表存储在同一个数据库中?

2 个答案:

答案 0 :(得分:5)

都不是。你应该规范化表格。你可以使用这样的东西:

Product Store Price
FooBar  CA    1.22
FooBar  MA    1.34
BarBaz  CA    2.30
BarBaz  MA    1.99

产品和商店可以是另一个表的外键,您可能还希望考虑使用surrogate keys而不是自然键。这样做的一个优点是,例如,如果产品名称发生变化,则不必修改任何密钥。

答案 1 :(得分:0)

您的两个选项都违反了良好的关系数据库设计原则。

  1. 拥有多个具有相同设计的表格,这表明您做错了。

  2. 有许多列都存储相同的数据(价格),这表明你做错了。

  3. 当您的业务扩展(例如,添加更多商店)时,表或列的数量会发生变化,这表明您做错了。他们可以在您的业务发生变化时(需要开始征税或跟踪客户)进行更改,但不会在仅仅扩展业务时进行更改。

  4. 你没有提到每家商店的价格是否变化,我假设库存确实存在。如果每个商店的价格发生变化,那么您可以创建一个表格,如:

    Product  Store   Price   Inventory
    Shoes    Boston  54.00   27
    Juice    Miami   1.49    100
    

    如果每个产品的价格是固定的,那么您可以从该表中删除价格列,并为产品价格创建一个新列:

    Product   Price
    Shoes     54.00
    Juice     1.49