我有PHP / MYSQL租车网站。在MYSQL表中我存储
现在,如果我把所有这些东西放进去,我将有大约70个柱子。 任何更聪明的方法来避免性能打击? 我不控制价格,也没有每日价格或每日保险公式。
一个想法是使用汽车板作为指标并将其吹成2个表,一个有价格(35行),一个有保险(35行)。还有其他吗?
DB有1000辆左右。我每天在DB中获得大约10.000个查询
非常感谢。
答案 0 :(得分:2)
下面的快速肮脏尝试。我会在专用表格中移动价格和保险费用,每个表格都有car_id
和days
字段。
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
更新:添加了车牌。我只是把它们放在汽车规格中。一般来说,它们与汽车有关,但将来可能会发生变化。如果他们经常变化,我宁愿把它们放在专用的桌子上。
我实际上会节省每个租用日的价格,具体取决于db的整体租用范围。这样,您可以执行类似
的操作SELECT price FROM prices
WHERE car_id = 123 AND days = MAX(days);
通过这种方式,您可以将“最后”价格乘以30天以上任何租金的实际租用天数。但这取决于定价定义。
答案 1 :(得分:0)
要规范化数据库(或更常见的设计数据库),您必须明确确定您拥有的实体。
根据您的描述,您有以下四个实体:
上面的每个实体都应该有一个表来处理它的属性(列)。
在定义实体之后,真正的规范化是定义实体之间的关系,通过,键属性(列)或通过新实体(表),例如,在多对多关系中。让我们讨论关系:
汽车:一辆车应该有一个规格,价格和保险。即这种关系是一对一的。因此,cars表应该有与其他三个表相关的specification_id,price_id和insurance_id列。
另一方面,其他三个表(实体:规格,价格和保险)可能有很多车,所以它与汽车的关系是一对多,并通过在汽车表中定义外键来涵盖( specification_id,price_id和insurance_id)
怎么会有效?
在插入新车之前,您必须完成其他实体。换句话说,应该在那些可敬的表格(实体)中找到所有可用,规格,价格,保险的清单,如果您有一辆没有任何已定义的新车,那么您必须创建新的实体,在插入或创建它之前满足其需要。即插入汽车应属于的新规格和/或新价格和/或新保险。
注意:这不是法律,您或其他人可能会发明另一个实体关系。但是,我在这里看到的是一个 基于关系数据库设计方法的一般提示