Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否有可能使用动态外键,最好/正确的方法是什么?_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 是否有可能使用动态外键,最好/正确的方法是什么?

Mysql 是否有可能使用动态外键,最好/正确的方法是什么?,mysql,sql,database-design,Mysql,Sql,Database Design,例如: 我有一个带有外键的“历史”表,根据字段值,它可能指向不同的表/实体 表历史记录: create table history( id int PimaryKey AUTO_INC, elementid int, (ForeignKey) elementtype varchar ) 此表已填充,例如: id ElementId ElementType 1 1

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

表历史记录:

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               ElementId           ElementType
1                1                   1
2                2                   2
3                2                   2
id               name
1                Device
2                Simcard
这说明我们有

  • id为“1”的“设备”类型实体的1条记录
  • 2个id为“2”的“Simcard”类型实体的记录
目标是拥有一个可用于多个实体的表

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

ALTER TABLE history MODIFY ElementType INTEGER;
ElementType是指:

create table entities(
    id int PimaryKey AUTO_INC,
    name varchar
)
将填充新表历史记录,例如:

id               ElementId           ElementType
1                1                   Device
2                2                   Simcard
3                2                   Simcard
id               ElementId           ElementType
1                1                   1
2                2                   2
3                2                   2
id               name
1                Device
2                Simcard
将填充实体表,例如:

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

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


这是2的
元素ID
等于simcard,这是巧合吗?我询问的原因是,如果总是这样,
elementid
将已经将元素标识为simcard,因此
elementtype
列将是多余的。@SchmitzIT否。elementid是指在elementtype中填充的实体的记录id。例如,我有一个实体simcard,其中有两个实例/行,我希望实体simcard的记录id为3,因此这将是一个历史实例,其中:elementid=3 elementType=simcard elementType引用实体