这种情况下的最佳设计数据库

时间:2014-10-17 09:25:23

标签: mysql database

我有一张桌子( prepay_bookings ),我在那里提供有关预付预订的所有信息,而且我已经使用了很长时间,所以它非常充实......

现在我想保存到货付款预订的信息,这个数据容器几乎相同但没有付款数据。那将少3或4个字段。

什么是最好的设计?

  • a)创建一个新表( arrival_bookings )并使用两个表
  • b)在现有的 prepay_bookings 中添加一个名为payment_mode的新字段,然后继续填写,但现在同时使用这两种类型的预订。
  • c)其他?

如果我使用b,最后我会以太多行结束..这会影响性能吗?

2 个答案:

答案 0 :(得分:2)

这是modelling the object oriented concept of inheritance in a relational database.

的经典案例
  

如果我使用b,我最后以太多行结束..这会影响到   性能

可能 - 但一般情况下,只要查询达到索引,数据库就不会真正关心你是否加倍记录数。找出答案的唯一方法是尝试 - 在测试系统上 - 看看瓶颈在哪里。

答案 1 :(得分:2)

总之 - 我不认为有最好的"回答,但是对于您的特定用例,您需要考虑权衡。如果它是您想要的速度 - 两个表将对许多行有所帮助,但是对维护和共享/ DRY代码有影响。

更多细节:

这取决于哪个mysql引擎,但作为一般规则,选择和插入2个表的速度会快一些,每个表的行数比一个较大的表多一半 - 每个表都有较小的索引,并且有数百万行除非您使用聪明的分区规则,否则会产生性能影响。

每个表都有自己的索引 - 并且使用额外的字段,您也必须对此进行索引。 它还取决于代码中的用例。

如果代码中包含您经常需要混合行查找的实例,我认为将它们放在一起会很有用。如果情况绝非如此,则每个select / insert都必须考虑该标志。

你总是可以为相同的东西模板化DDL(创建语法)。 如果您正在共享一些表单代码和其他代码 - 将它们分开可能会让它们分开,使代码更难维护或更少干。