我只是想从设计,效率和空间的角度来看,什么是更好的选择?自联接或使用两个表然后加入它们?
我有一个存储产品设计详细信息的MySQL数据库,designer_type
可以是company_staff
,也可以是某个customer_type
。
最初我想过有两个表,一个叫staff_design
,一个叫customer_design
。
无论哪种方式,design
信息几乎都是相同的,除非它是客户,否则staff_design不需要两个额外的列,一个是{{的ID的外键。 1}},以及staff_design
(用户而非工作人员可以添加的内容)。这两个列都可以是NULL。
因此,如果我设计数据库使这两个表合并,并且只有一个design_name
表,那么这个表将有3个额外的列可能经常是NULL:它需要{ {1}}(指定design
或design_type
),然后是我上面提到的两个额外列。 (customer
和staff
FK)。
哪种设计更好?
我倾向于单表设计主要是为了减少硬盘处理(获取两个不同的表而不是一个)。然后我将不得不使用大量的自我加入。
什么被认为是专业更好的方法?预计员工设计人员将节省数千个设计,而只有高级设计和额外费用的客户将节省自己的定制设计。因此,肯定会有比客户设计更多的员工设计。
答案 0 :(得分:2)
由于记录的数量级只有几千,我建议采用单表设计。这将使您的生活更轻松,并且表格的大小无法证明分割表格的优化。
答案 1 :(得分:1)
如果它让你的生活变得更轻松,那么如果我理解你的设计,将所有内容合并到一个单独的表中并没有错。
特别是如果您的Mysql数据库使用Innodb引擎:NULL字段don't take space(或可忽略不计的数量,1位左右)。
答案 2 :(得分:1)
你在这里拥有的本质上是继承(aka。类别,子类型,泛化层次等...)。
从3 possible ways开始实现它,您将描述“一个表中的所有类”。这没有什么不妥 - 每种方式都有自己的优点和缺点,这个方法似乎适合你。