SQL table 引用行的子集
SQL table referring to a subset of rows
假设我有一个 table,有一些材料:金、水、冰。
每个 material 可以是:固体,液体。
我想添加一个新的 table,称为形状,它显然只包含固体 material 的信息(液体没有确定的形状)。
我得出的结论是添加这个 table,并用液体的 NULL 值填充它。
但是有更清洁的解决方案吗? (一个 Shape table 其行将只引用实体)。
我不明白你的问题。您只需添加:
create table shapes (
shape_id int auto_increment primary key,
material_id int,
. . .
foreign key (material_id) references materials (material_id)
);
您只能在 shapes
中添加实体行,因为它(通常)不适用于其他类型的实体。此数据模型不强制执行该约束。这是可能的,但我不知道是否有必要强制执行。至于你的例子,关于玻璃是液体还是固体存在着有意义的争论。
假设我有一个 table,有一些材料:金、水、冰。 每个 material 可以是:固体,液体。
我想添加一个新的 table,称为形状,它显然只包含固体 material 的信息(液体没有确定的形状)。
我得出的结论是添加这个 table,并用液体的 NULL 值填充它。
但是有更清洁的解决方案吗? (一个 Shape table 其行将只引用实体)。
我不明白你的问题。您只需添加:
create table shapes (
shape_id int auto_increment primary key,
material_id int,
. . .
foreign key (material_id) references materials (material_id)
);
您只能在 shapes
中添加实体行,因为它(通常)不适用于其他类型的实体。此数据模型不强制执行该约束。这是可能的,但我不知道是否有必要强制执行。至于你的例子,关于玻璃是液体还是固体存在着有意义的争论。