【问题标题】:Model Sql relation many to many of the same entity建模 Sql 关系多对多的同一实体
【发布时间】:2014-08-31 08:56:00
【问题描述】:

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

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

人员将是为该业务工作的独立专业人员的列表。

您对表格有什么建议。我的第一个想法是让 Business 表带有 Type 列。然后有另一个表:

商务专业人士 业务编号 业务专业ID

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

我正在考虑这个问题,因为通常在网站上,我认为独立专业人士与商业人士相同。但有时我还需要展示哪个独立专业人员为某项业务工作。

这有意义吗?

【问题讨论】:

    标签: sql database-schema


    【解决方案1】:

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

    考虑一下 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,
    )
    

    这种模式现在已经足够普遍,可以让任何专业人士从事零个或多个业务,而任何企业都可以雇用零个或多个这样的专业人士。

    它会通过查询告诉您哪些企业只有一名员工,或者哪些企业名称与专业人士的姓名匹配。

    在应用程序的业务逻辑中,您还可以执行类似查找 DBAbusiness_type (做业务,而不是数据库管理员)并确保在插入、更新或删除时它们是业务只有一个人,他们的business_name 与他们的professional_name 匹配。 (这实际上过于严格,但旨在说明实体之间的建模关系与业务逻辑之间的区别)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多