不要使用单张桌子。转到关系。
我建议在“主”表(具有共同特征的表)和包含特定信息的三个表之间建立所谓的多态关系。结构应该是这样的:
主台
身份证件
标题
…
类别名称(varchar或char)
类别ID(整数)
类别表
身份证件
(特定列)
“类别名称”字段应包含特定类别表的表名,例如“作业类别”,而“类别ID”应指向类别表中的ID。示例如下:
# MAIN TABLE
id | title | ... | category_name | category_id
-------------------------------------------------------
123 | Some title | ... | job_category | 345
321 | Another title | ... | sale_category | 543
# SPECIFIC TABLE (job_category)
id | ...
---------
345 | ...
# SPECIFIC TABLE (sale_category)
id | ...
---------
543 | ...
现在,无论何时查询主表,您都将立即知道要从哪个表中获取附加数据,并且您将知道该表中的ID。这种方法的唯一缺点是,您必须执行两个独立的查询来获取单个项目的信息。然而,在事务中可能会这样做。
另一方面,对于以另一种方式获取数据(例如,搜索作业类别中的某个内容),可以通过联接从主表中获取相关数据。记住,不仅要加入main.category_id=jobs_category.id,还要使用category_name列作为连接条件。否则,您可以提取属于其他类别之一的数据。
为了获得最佳性能,您可能需要索引类别名称和类别ID列。如前一段所述,这将主要加快连接两个表的任何查询。
希望这有帮助!