2

我们有一个带有employees,companiesaddresses表的 MySQL 数据库。设置是这样工作的:员工和公司都有一个 id。由于它们位于两个不同的表中,因此员工可以有 id = 1,而公司可以有 id = 1。两者都可以有多个地址。

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

element_id  
element_type_id

element_type_id 为 1 = 个人或 2 = 公司

整个事情有点复杂,还有更多的表格,但这有点解释了这个概念。现在的问题是我们想开始使用实体框架,为此我们需要定义与外键的关系。
但是,对于我们目前的设置来说,这听起来几乎是不可能的,不是吗?由于地址表需要以某种方式与个人和公司相结合......

有任何想法吗?

4

2 回答 2

0

您已经说过这个概念不适合关系数据库。没错,MySQL 和所有其他的只是不支持它。而且它不是规范化的布局,因此可能会被数据库工程师视为不好的做法。

您应该考虑通过创建两个附加表来将地址与关系分开:employee_adresses 和 company_addresses,每个表都包含与公司和地址或员工和地址的关系。这样,您可能会获得一个用于公司和许多员工的地址,这可能是一件好事(标准化结构)。

于 2012-08-29T08:49:17.497 回答
0

这个概念被称为多态关联。我曾经问过一个关于它的问题,因为我有一个类似的数据结构,我想让它具有参考意义。就这个问题而言,您Address对应于 Comment 表和EmployeePersonCompany等。

答案非常好。如果您可以更改架构,我当然会选择并使用该方法。

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

于 2012-08-29T12:56:33.833 回答