如何强制来自两个不同表的两个(PK 相同 FK)列不相交

御风风

考虑下面的例子

  • 车辆是我的超类
  • 自行车和汽车是我的子类
CREATE TABLE Vehicle (

    Vehicle_id        INT   PRIMARY KEY
    ...

);

CREATE TABLE Bike (

    Vehicle_id       INT   PRIMARY KEY REFERENCES Vehicle(Vehicle_id)
    ...

);

CREATE TABLE Car (

    Vehicle_id       INT   PRIMARY KEY REFERENCES Vehicle(Vehicle_id)
    ...

);
  • 车辆不一定是自行车或汽车,但不能既是自行车又是汽车
  • 我一直在尝试这样的事情(我如何引用自行车??
ALTER TABLE ONLY Car
   ADD CONSTRAINT not_in_bike CHECK (??)
  • 或者,我可以做这样的事情吗
ALTER TABLE Car AND Bike
    ADD CONSTRAINT Car_or_Bike CHECK (Car.Vehicle_id <> Bike.Vehicle_id)

谢谢!

劳伦兹·阿尔伯

有两种可能:

  1. 将所有实体存储在一个表中,并使用一列(type左右)来确定某行是哪种类型。

  2. 使用您现在的布局,但type在所有三个表中添加一列将该列添加到主键或在 上创建唯一约束(vehicle_id, type)

    定义要包含的外键type并使用CHECK约束确保它们具有正确的值

    ALTER TABLE bike ADD FOREIGN KEY (vehicle_id, vehicle_type) REFERENCES vehicle;
    
    ALTER TABLE bike ADD CHECK (vehicle_type = 'bike');
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL从两个不同的表中选择相同的列

如何删除只有两列相同的两个不同表的重复值?

如何对具有相同列的两个表求和?

如何在具有相同列的两个表中找到不同的行?

来自同一表的两个FK具有相同的含义

在两个表中查找不相同的文本

比较两个不同表中的不相同字段

如何在图中找到两个顶点不相交的路径,两条路径具有相同的源但不同的目的地?

联合两个表后如何在两个表中按具有相同列名的列排序?

更新表在不同的行中具有两个具有相同值的不同列

检查两个不同列中的值并替换不相同的值

如何计算来自两个不同表的两个独立列?

相同数组的两个不同列的相加

如何检查和删除python中两个不同目录中不相同的文件?

如何使两个查询中的两个结果(具有相同的列)显示在单个查询表中

SQL合并两个表,其中两个列具有相同的值

连接具有两个相同列的两个表

如何创建具有两个内部互不相同的内部imgclass项的表?

如何在 SQL Server 中联接两个 ID 不相同的表?

根据两个表的相同值更新列值

从具有相同列的两个表中选择

如何让JooQ合并两个不同的表,它们具有相同的列和数据类型?

在两个不同的表中创建具有相同列的视图 SQL

SQL Server 2008,通过从不共享相同列信息的两个不同表中选择两个列来获取一个新表

如何合并来自两个不同数据帧的具有相同名称的两列并比较和打印相似的列

如何从两个具有相同列的现有表创建新的配置单元表

如何仅从具有相同表结构的两个表中获取更新的列值

如何在MySQL中相同列不同行中找到两个值之间的差异

如何将两个不同的Dataframe列均等化为相同大小