我们有一个包含employees
,companies
和addresses
表的MySQL数据库。
设置的工作方式如下:员工和公司都有ID 。由于它们位于两个不同的表中,因此员工可以具有id = 1且公司可以具有id = 1.两者都可以具有多个地址。
现在,地址表有两列将其链接到公司或员工:
element_id
element_type_id
element_type_id是1 = person或2 = company
整个事情有点复杂,还有更多的表,但有点解释了这个概念。 现在问题是我们想开始使用实体框架,为此我们需要定义与外键的关系 但是我们现在拥有的设置听起来几乎不可能,是吗? 由于地址表需要与人和公司合并...... [/ p>
有什么想法吗?
答案 0 :(得分:0)
你已经暗示自己这个概念不适合关系数据库。没错,MySQL和其他所有人都不支持它。它不是一个标准化的布局,因此可能被数据库工程师认为是不好的做法。
您应该考虑通过创建另外两个表来分隔地址和关系:employee_adresses和company_addresses,每个表都与公司和地址,员工和地址有关系。通过这种方式,您可能会获得一个用于公司和许多员工的地址,这可能是一件好事(标准化结构)。
答案 1 :(得分:0)
这个概念被称为多态关联。我曾经问question一个关于它的问题,因为我有一个类似的数据结构,我想要引用它。就此问题而言,您的Address
与评论表相对应,Employee
和Company
与人等等相对应。
答案非常好。如果您可以更改架构,我肯定会采用这种方法。
如果您无法更改架构,则可以始终在EF模型中对Address
类进行子类型,并使用element_type_id
作为鉴别器列。您可以创建子类型EmployeeAddress
和CompanyAddress
,其中Employee
表示前者,Company
表示后者。但由于“整个事情有点复杂”,我不确定这在你的情况下是否可行。