MySQL外键用一个常量连接到两个表?

时间:2012-08-29 08:24:06

标签: mysql entity-framework foreign-keys

我们有一个包含employeescompaniesaddresses表的MySQL数据库。 设置的工作方式如下:员工和公司都有ID 。由于它们位于两个不同的表中,因此员工可以具有id = 1且公司可以具有id = 1.两者都可以具有多个地址。

现在,地址表有两列将其链接到公司或员工:

element_id  
element_type_id

element_type_id是1 = person或2 = company

整个事情有点复杂,还有更多的表,但有点解释了这个概念。 现在问题是我们想开始使用实体框架,为此我们需要定义与外键的关系 但是我们现在拥有的设置听起来几乎不可能,是吗? 由于地址表需要与人和公司合并...... [/ p>

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你已经暗示自己这个概念不适合关系数据库。没错,MySQL和其他所有人都不支持它。它不是一个标准化的布局,因此可能被数据库工程师认为是不好的做法。

您应该考虑通过创建另外两个表来分隔地址和关系:employee_adresses和company_addresses,每个表都与公司和地址,员工和地址有关系。通过这种方式,您可能会获得一个用于公司和许多员工的地址,这可能是一件好事(标准化结构)。

答案 1 :(得分:0)

这个概念被称为多态关联。我曾经问question一个关于它的问题,因为我有一个类似的数据结构,我想要引用它。就此问题而言,您的Address与评论表相对应,EmployeeCompany与人等等相对应。

答案非常好。如果您可以更改架构,我肯定会采用这种方法。

如果您无法更改架构,则可以始终在EF模型中对Address类进行子类型,并使用element_type_id作为鉴别器列。您可以创建子类型EmployeeAddressCompanyAddress,其中Employee表示前者,Company表示后者。但由于“整个事情有点复杂”,我不确定这在你的情况下是否可行。