【发布时间】: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