我只是想从设计、效率和空间的角度来看,什么是更好的选择?自联接还是使用两个表然后联接?
我有一个MySQL数据库,它存储产品设计细节,designer_type
可以是company_staff
,也可以是某个customer_type
。
最初我想有两个表,一个叫staff_design
,一个叫做customer_design
。
无论哪种方式,design
信息都几乎保持不变,只是如果是客户,则有两个额外的列是员工设计不需要的,一个是staff_design
ID的外键,另一个则是design_name
(用户而非员工可以添加)。这两列都可以为NULL。
因此,如果我设计数据库,使这两个表合并,并且只有一个design
表,那么这个表将有3个额外的列,这些列可能经常为NULL:它需要有design_type
(指定customer
或staff
),然后是我上面提到的两个额外列。(design_name
和staff_design
FK)。
哪种设计更好?
我倾向于单表设计,主要是为了减少硬盘处理(获取两个不同的表,而不是一个)。然后我将不得不使用大量的自联接。
在专业上,什么被认为是更好的方法?预计工作人员将保存数千个设计,而只有高级和需要额外费用的客户才能保存自己的定制设计。因此,员工设计肯定会比客户设计多得多。
由于记录的数量级只有几千,我建议采用单表设计。这将使您的生活更轻松,而且表的大小并不能证明拆分表的优化是合理的。
如果它能让你的生活更轻松,那么如果我很好地理解你的设计,将所有内容合并到一个表中也没什么错。
特别是如果您的Mysql数据库使用Innodb引擎:NULL字段不占用空间(或者可以忽略不计,1位左右)。
这里所拥有的基本上是继承(即类别、子类型、泛化层次结构等)。
在实现它的三种可能方法中,您描述的是"一个表中的所有类"。这并没有错——每种方式都有自己的利弊,这一点似乎适合你的情况。