2

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

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

最初我想有两张桌子,一张叫staff_design,一张叫customer_design

无论哪种方式,design信息都几乎保持不变,除了如果它是客户,还有两个额外的列是 staff_design 不需要的,一个是 a 的 ID 的外键staff_design,另一个是design_name(用户和不是工作人员可以添加)。这 2 列都可能为 NULL。

因此,如果我设计数据库以使这两个表合并并且只有一个design表,那么该表将有 3 个额外的列,这些列可能经常为 NULL:它需要有design_type(指定customer,或staff),然后我上面提到的两个额外的列。(design_namestaff_designFK)。

哪个设计更好?

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

什么被认为是专业的更好的方法?预计staff_designers 将保存数千个设计,而只有高级和额外付费的客户才能保存他们自己的定制设计。因此,员工设计肯定会比客户设计多得多。

4

3 回答 3

2

由于记录的数量级只有几千,所以我建议采用单表设计。这将使您的生活更轻松,并且表格的大小并不能证明拆分表格的优化是合理的。

于 2012-10-02T09:17:36.730 回答
1

如果它使您的生活更轻松,那么如果我很好地理解您的设计,那么将所有内容合并到一张表中没有任何问题。

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

于 2012-10-02T09:05:13.853 回答
1

您在这里拥有的本质上是继承(又名类别、子类型、泛化层次结构等......)。

在实现它的3 种可能方法中,您描述的是“一张表中的所有类”。这没有任何问题 - 每种方式都有自己的优缺点,这在你的情况下似乎是合适的。

于 2012-10-02T09:22:55.533 回答