Mysql 职位数据库设计

Mysql 职位数据库设计,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我有两种工作岗位--公司工作岗位和项目工作岗位。以下是每个的输入字段(在前端): *company* - company name - company location - company description *project* - project name - project location - project description - project type 对于这个问题,最好的数据库设计是什么?一个表,将所有字段分开- `job_post` - company_name -

我有两种工作岗位--公司工作岗位和项目工作岗位。以下是每个的输入字段(在前端):

*company*
- company name
- company location
- company description

*project*
- project name
- project location
- project description
- project type
对于这个问题,最好的数据库设计是什么?一个表,将所有字段分开-

`job_post`
- company_name
- company_location
- company_description
- project_name
- project_description
- project_type
- project_location
一个组合字段的表-

`job_post`
- name
- location
- description
- project_type
- is_company (i.e., whether a company (True) or project (False)

还是两张桌子,还是别的什么?为什么这种方法比其他方法更可取?

取决于许多因素,包括此作业的最大规模,我将规范化数据,甚至超过两个单独的表,可能有一个公司名称表,等等。。。因为连接多个表会导致比一个充满所有信息的长表更快的查询。如果您想在项目中添加更多字段,但不想在公司中添加更多字段,该怎么办


简而言之,我肯定会使用多个表。

这肯定与表中存储的数据量有关。在抽象视图中,一个表看起来非常简单。但正如Ryan所说的,如果明天需求发生变化,需要为一种类型的公司或项目添加更多的列,该怎么办。如果您预测将来会在表中存储大量数据,那么我更喜欢2个表,这样可以避免对大量数据进行不必要的过滤,这是一种性能开销。

您在OP中确定了3个主要对象;工作、项目和公司。这些对象中的每一个都有自己的属性,没有一个与其他对象相关联,因此我建议使用类似的属性(仅用于说明):


这种模式允许您在不影响其他对象的情况下添加特定于对象的属性,同时通过链接表将它们组合到一个“作业公告”中。

+1是。你通常应该把事情分成最小的部分,以获得最大的灵活性。
job
  id
  name

company
  id
  name

project
  id
  name

link_job_company_project
  job_id
  company_id
  project_id