是否可以拥有动态外键,这样做的最佳/正确方法是什么?

Ism*_*ail 6 mysql sql database-design

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

表历史:

create table history(
    id int PimaryKey AUTO_INC,
    elementid int, (ForeignKey)
    elementtype varchar
)
Run Code Online (Sandbox Code Playgroud)

该表已填充,例如:

id               ElementId           ElementType
1                1                   Device
2                2                   Simcard
3                2                   Simcard
Run Code Online (Sandbox Code Playgroud)

这告诉我们有

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

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

这是集成动态外键的正确方法吗?我还想到的是创建一个包含表/实体的列表以供参考,因此该表将如下所示:

ALTER TABLE history MODIFY ElementType INTEGER;
Run Code Online (Sandbox Code Playgroud)

ElementType 将指:

create table entities(
    id int PimaryKey AUTO_INC,
    name varchar
)
Run Code Online (Sandbox Code Playgroud)

填充新表历史记录,例如:

id               ElementId           ElementType
1                1                   1
2                2                   2
3                2                   2
Run Code Online (Sandbox Code Playgroud)

实体表被填充,例如:

id               name
1                Device
2                Simcard
Run Code Online (Sandbox Code Playgroud)

Bra*_*vic 9

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

这里有原因,以及该怎么做,而不是