模型Sql关系很多到同一个实体的很多

时间:2014-08-31 08:56:01

标签: sql database-schema

在我的应用中,我有业务对象:

商业       ID       名称       类型:商业或独立专业       人

人员将列出为该业务工作的独立专业人士。

你建议什么作为表格。我的第一个想法是让Business表具有Type列。然后有另一张桌子:

BusinessProfesionals   BusinessId   BusinessProfessionalId

两个键都将引用业务表Id列。

我在想这个,因为通常在网站上我认为独立专业与商业相同。但我有时也需要证明哪个独立专业人士适合某个行业。

这有意义吗?

1 个答案:

答案 0 :(得分:0)

这是数据建模中的一个常见问题,两个与概念相混淆。在这种情况下,仅仅因为一个人业务,它就不会使它们成为同一个实体。

考虑John Frank Enterprises LLC。唯一的员工是约翰弗兰克。建模时的问题不应该是:"这是一个事实,这是一个在模型中明确描述的单人业务?"问题应该是:"我是否可以构建一个能够按员工数量识别业务的高性能查询。

因此,如果您在伪SQL中有以下表。请注意定义关系的物理主键的约定:

business_type (
  business_type_id int primary_key,
  business_type_name varchar(50),
)

business (
  business_id int primary_key,
  business_type_id int foreign_key # Now the business is described,
  business_name varchar(255),
)

independent_professional (
  independent_professional_id int primary_key,
  first_name varchar(50),
  last_name varchar(50),
)

business_independent_professional (
  business_independent_professional int primary_key, 
  business_id int foreign_key,
  independent_professional_id int foreign_key,
)

这种模式现在足以让任何专业人士在零或更多业务上工作,而任何企业都可以雇用零或更多这些专业人士。

它将通过查询告诉您哪些企业只有一名员工或哪些商家名称与专业人员姓名相匹配。

在应用程序的业务逻辑中,您还可以执行以下操作:查找business_type DBA(执行业务,而非数据库管理员)并确保在插入,更新或删除时他们只是一个人的业务,他们的business_name与他们的professional_name匹配。 (这实际上限制性太强,但试图说明实体与业务逻辑之间的建模关系之间的差异)