如何规范化我的MySQL数据库

时间:2016-10-16 12:22:51

标签: php mysql database-design

我有PHP / MYSQL租车网站。在MYSQL表中我存储

  1. 汽车牌照
  2. 汽车规格(如AC,品牌等)
  3. 每天的价格(30支),因为1天的价格是每天X欧元,而30天的价格是每天Y欧元
  4. 每天保险(这是一个 汽车用品因为它取决于具体的汽车历史,一年, 品牌,型号等)。所以,由于一个月有30天,我们 这里有另外30列,因为保险1天<>保险 28天让我们说
  5. 现在,如果我把所有这些东西放进去,我将有大约70个柱子。 任何更聪明的方法来避免性能打击? 我不控制价格,也没有每日价格或每日保险公式。

    一个想法是使用汽车板作为指标并将其吹成2个表,一个有价格(35行),一个有保险(35行)。还有其他吗?

    DB有1000辆左右。我每天在DB中获得大约10.000个查询

    非常感谢。

2 个答案:

答案 0 :(得分:2)

下面的快速肮脏尝试。我会在专用表格中移动价格和保险费用,每个表格都有car_iddays字段。

Select brand,type,ac,seats FROM cars
LEFT JOIN prices ON cars.id = prices.car_id
LEFT JOIN insurence_costs ON cars.id = insurence_costs.car_id
WHERE
    licensePlate = 'HH-OH-234'
    AND prices.days = 28
    AND insurence_costs.days = 28

更新:添加了车牌。我只是把它们放在汽车规格中。一般来说,它们与汽车有关,但将来可能会发生变化。如果他们经常变化,我宁愿把它们放在专用的桌子上。 MySQL Workbench Sheet Screenshot

我实际上会节省每个租用日的价格,具体取决于db的整体租用范围。这样,您可以执行类似

的操作
SELECT price FROM prices
WHERE car_id = 123 AND days = MAX(days);

通过这种方式,您可以将“最后”价格乘以30天以上任何租金的实际租用天数。但这取决于定价定义。

答案 1 :(得分:0)

要规范化数据库(或更常见的设计数据库),您必须明确确定您拥有的实体。

根据您的描述,您有以下四个实体:

  1. 汽车
  2. 规范
  3. 价格
  4. 保险
  5. 上面的每个实体都应该有一个表来处理它的属性(列)。

    在定义实体之后,真正的规范化是定义实体之间的关系,通过,键属性(列)或通过新实体(表),例如,在多对多关系中。让我们讨论关系:

    1. 汽车:一辆车应该有一个规格,价格和保险。即这种关系是一对一的。因此,cars表应该有与其他三个表相关的specification_id,price_id和insurance_id列。

    2. 另一方面,其他三个表(实体:规格,价格和保险)可能有很多车,所以它与汽车的关系是一对多,并通过在汽车表中定义外键来涵盖( specification_id,price_id和insurance_id)

    3. 怎么会有效?

      在插入新车之前,您必须完成其他实体。换句话说,应该在那些可敬的表格(实体)中找到所有可用,规格,价格,保险的清单,如果您有一辆没有任何已定义的新车,那么您必须创建新的实体,在插入或创建它之前满足其需要。即插入汽车应属于的新规格和/或新价格和/或新保险。

        

      注意:这不是法律,您或其他人可能会发明另一个实体关系。但是,我在这里看到的是一个   基于关系数据库设计方法的一般提示