mysql效率:自连接与两个表分割

时间:2012-10-02 08:42:53

标签: mysql database database-design join self-join

我只是想从设计,效率和空间的角度来看,什么是更好的选择?自联接或使用两个表然后加入它们?

我有一个存储产品设计详细信息的MySQL数据库,designer_type可以是company_staff,也可以是某个customer_type

最初我想过有两个表,一个叫staff_design,一个叫customer_design

无论哪种方式,design信息几乎都是相同的,除非它是客户,否则staff_design不需要两个额外的列,一个是{{的ID的外键。 1}},以及staff_design(用户而非工作人员可以添加的内容)。这两个列都可以是NULL。

因此,如果我设计数据库使这两个表合并,并且只有一个design_name表,那么这个表将有3个额外的列可能经常是NULL:它需要{ {1}}(指定designdesign_type),然后是我上面提到的两个额外列。 (customerstaff FK)。

哪种设计更好?

我倾向于单表设计主要是为了减少硬盘处理(获取两个不同的表而不是一个)。然后我将不得不使用大量的自我加入。

什么被认为是专业更好的方法?预计员工设计人员将节省数千个设计,而只有高级设计和额外费用的客户将节省自己的定制设计。因此,肯定会有比客户设计更多的员工设计。

3 个答案:

答案 0 :(得分:2)

由于记录的数量级只有几千,我建议采用单表设计。这将使您的生活更轻松,并且表格的大小无法证明分割表格的优化。

答案 1 :(得分:1)

如果它让你的生活变得更轻松,那么如果我理解你的设计,将所有内容合并到一个单独的表中并没有错。

特别是如果您的Mysql数据库使用Innodb引擎:NULL字段don't take space(或可忽略不计的数量,1位左右)。

答案 2 :(得分:1)

你在这里拥有的本质上是继承(aka。类别,子类型,泛化层次等...)。

3 possible ways开始实现它,您将描述“一个表中的所有类”。这没有什么不妥 - 每种方式都有自己的优点和缺点,这个方法似乎适合你。