mysql - 是否可以使用动态外键,最好/正确的做法是什么?

标签 mysql sql database-design

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

表历史:

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

最佳答案

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

这是 reasons why , 和什么 do instead .

关于mysql - 是否可以使用动态外键,最好/正确的做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372660/

相关文章:

php - 使用 CASE WHEN 时,如果 LEFT JOIN 中找不到匹配行,则忽略列

MySQL 规范化或非规范化

mysql - 数据库设计一张表或两张表

mysql - 从三个表中选择数据

mysql - 使用 MYSQL DB,使用 HSQLDB 进行单元测试 = 问题

mysql - 使用 sum 和 rollup 获取列的百分比

mysql - 如何在 SET 子查询中引用外表?

每次运行 SQL 查询时,SQL 检查前 100 行是否不同?

mysql - mysql中基于条件的子查询的输出

database - 使用关系更改 Access 主键