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 中添加实体行,因为它(通常)不适用于其他类型的实体。此数据模型不强制执行该约束。这是可能的,但我不知道是否有必要强制执行。至于你的例子,关于玻璃是液体还是固体存在着有意义的争论。