高效的分类数据库Mysql结构

高效的分类数据库Mysql结构,mysql,architecture,Mysql,Architecture,我正在重组一个ClassifiedsMySQL数据库,其中不同的主要部分被分成不同的表。例如,销售项目有自己的具有唯一ID的表,作业有自己的具有唯一ID的表,个人也有自己的表 这些部分都有一些共同的特点: -id -标题 -正文 -上市状态 -海报 -回复电子邮件 -投寄日期 但它们都需要一些单独的信息: -每个类别都有不同的类别集和类别树可供选择(这会影响存储它们所需的结构) -工作需要存储工资、开始日期等信息。 -销售项目需要存储价格、海外建筑运营管理局等信息 因此,当我可以将db重构到一个

我正在重组一个ClassifiedsMySQL数据库,其中不同的主要部分被分成不同的表。例如,销售项目有自己的具有唯一ID的表,作业有自己的具有唯一ID的表,个人也有自己的表

这些部分都有一些共同的特点:

-id
-标题
-正文
-上市状态
-海报
-回复电子邮件
-投寄日期

但它们都需要一些单独的信息:

-每个类别都有不同的类别集和类别树可供选择(这会影响存储它们所需的结构)
-工作需要存储工资、开始日期等信息。
-销售项目需要存储价格、海外建筑运营管理局等信息


因此,当我可以将db重构到一个通用表来存储所有的常规列表信息时,是否更好的做法是不考虑节,然后将自定义数据存储到小表中,还是最好不要使用当前结构而将各部分分开?

听起来它们都是独立的实体,彼此之间没有任何关系(ecxept用于共享某些列定义),对吗

你有没有想过做一个像这样的选择

SELECT *
FROM main_entity
WHERE entity_type IN ('SALE_ITEM', 'JOB', 'PERSONAL')?

否则,我不会将它们合并到一个表中。

不要使用单个表。去关系化

我建议在“主”表(具有共同特征的表)和包含特定信息的三个表之间建立所谓的多态关系。该结构看起来像这样:

# 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 | ...
主表

  • 身份证
  • 头衔
  • 类别名称(VARCHAR或CHAR)
  • 类别id(整数)
类别表

  • 身份证
  • (具体栏目)
category_name字段应包含特定类别表的表名,例如“job_category”,而category_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。这种方法唯一的缺点是必须执行两个单独的查询才能获取单个项目的信息。不过,在事务中可能会这样做

另一方面,为了以另一种方式获取数据(例如,搜索jobs_类别中的内容),可以使用联接从主表获取关联数据。记住不仅要连接main.category\u id=jobs\u category.id,还要使用category\u name列作为连接条件。否则,您可以获取属于其他类别之一的数据

为了获得最佳性能,您可能需要为category\u name和category\u id列编制索引。这将大大加快连接两个表的任何查询的速度,如前一段所述

希望这有帮助