职位的优先数据库设计

时间:2012-03-06 04:01:45

标签: 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_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)

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

3 个答案:

答案 0 :(得分:5)

根据很多因素(包括此作业的最大大小),我会将数据标准化甚至超过2个单独的表,可能还有公司名称表等...因为连接多个表会导致查询速度快于一个长长的永不结束的桌子,充满了你所有的信息。如果您想为项目而不是公司添加更多字段,该怎么办?

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

答案 1 :(得分:2)

您已在OP中识别出3个主要对象;工作,项目和公司。这些对象中的每一个都有自己的属性,其中没有一个属性与其他对象相关联,因此我推荐类似于(仅限于演示)的东西:

job
  id
  name

company
  id
  name

project
  id
  name

link_job_company_project
  job_id
  company_id
  project_id

这种类型的架构允许您添加特定于对象的属性而不影响其他对象,但是通过链接表将它们组合在一起形成一个“工作帖”。

答案 2 :(得分:1)

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