【问题标题】:MySQL foreign key connecting to two tables with a constant?MySQL外键用常数连接到两个表?
【发布时间】:2012-08-23 19:28:19
【问题描述】:

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

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

element_id  
element_type_id

element_type_id 是 1 = 个人或 2 = 公司

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

有什么想法吗?

【问题讨论】:

  • 可以更改数据库架构吗?
  • 理论上我们可以。但正如我所说,它比这更复杂一些。这种方法已在数据库中广泛使用,并且在很多情况下都非常方便。例如我们有任务。这个任务可能是针对公司、员工、工作、订单或交易的。它与我们可以添加到每个需要任务的元素中的 WebForm 控件完全相同。

标签: mysql entity-framework foreign-keys


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多