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引用实体