【问题标题】:Is it possible to have an dynamic foreign key, and what is the best/correct to do so?是否有可能拥有一个动态外键,最好/正确的做法是什么?
【发布时间】:2020-06-16 21:35:17
【问题描述】:

例如: 我有一个带有外键的“历史”表,它可能根据字段值指向不同的表/实体。

表历史记录:

create table history(
    id int PimaryKey AUTO_INC,
    elementid int, (ForeignKey)
    elementtype varchar
)

此表已填充,例如:

id               ElementId           ElementType
1                1                   Device
2                2                   Simcard
3                2                   Simcard

这告诉我们有

  • ID 为“1”的“设备”类型实体的 1 条记录
  • ID 为“2”的“Simcard”类型实体的 2 条记录

我们的目标是拥有一个可用于多个实体的表。

这是集成动态外键的正确方法吗? 我还想到的是创建一个包含要引用的表/实体的列表 所以表格看起来像:

ALTER TABLE history MODIFY ElementType INTEGER;

ElementType 指的是:

create table entities(
    id int PimaryKey AUTO_INC,
    name varchar
)

新表历史被填充,例如:

id               ElementId           ElementType
1                1                   1
2                2                   2
3                2                   2

实体表填充例如:

id               name
1                Device
2                Simcard

【问题讨论】:

  • 2的elementid等于simcard是巧合吗?我问的原因是,如果总是这样,elementid 已经将元素标识为 simcard,因此elementtype 列将是多余的。
  • @SchmitzIT 没有。 elementId指的是elementType中填写的实体的记录id。例如,我有一个带有几个实例/行的实体 simcard,我想记录实体 simcard 的 id 3,所以这将是一个历史实例: elementid = 3 elementType= simcard ElementType 指的是实体

标签: mysql sql database-design


【解决方案1】:

实现动态 FK 的正确方法是不要这样做。

这里是reasons why,以及do instead 的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2011-04-07
    • 2014-06-06
    相关资源
    最近更新 更多