数据建模中的一个常见问题是两个概念混为一谈。在这种情况下,仅仅因为一个人 是 企业,它并不会使他们成为同一个实体。
考虑一下 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,
)
这种模式现在已经足够普遍,可以让任何专业人士从事零个或多个业务,而任何企业都可以雇用零个或多个这样的专业人士。
它会通过查询告诉您哪些企业只有一名员工,或者哪些企业名称与专业人士的姓名匹配。
在应用程序的业务逻辑中,您还可以执行类似查找 DBA 的 business_type (做业务,而不是数据库管理员)并确保在插入、更新或删除时它们是业务只有一个人,他们的business_name 与他们的professional_name 匹配。 (这实际上过于严格,但旨在说明实体之间的建模关系与业务逻辑之间的区别)