使用Oracle SQL定义外键

时间:2014-10-20 03:00:04

标签: sql oracle

我的SQL模式文件中有几个表。当我创建表并定义约束(外键和主键)时,运行架构成为一个问题。它表示该表不存在,因为外键引用了模式中稍后的另一个表。 我该如何解决这个问题?

一个例子是:

CREATE TABLE FLIGHT (
            route_id VARCHAR2(5),

            airline_iatacode VARCHAR2(5) NOT NULL,

            flight_depcity VARCHAR2(30),

            flight_arrcity VARCHAR2(30),

            flight_schedule DATE,

            flight_status DATE,

            CONSTRAINT FLIGHT_PK PRIMARY KEY (route_id, airline_iatacode),

            CONSTRAINT FLIGHT_FK1 FOREIGN KEY (route_id) REFERENCES ROUTE (route_id),

            CONSTRAINT FLIGHT_FK2 FOREIGN KEY (airline_iatacode) REFERENCES AIRLINE (airline_iatacode)
);

当我尝试运行架构时,无法创建表,因为AIRLINE和ROUTE表稍后会出现在代码中。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

第一个选项是以正确的顺序创建表。由于flight取决于routeairline,因此这些表格会显示在flight之前。对于几乎任何正确设计的模式,应该可以按正确的顺序放置表,尽管它可能会有点乏味。如果您有循环引用(A引用BB引用A),那么这不起作用。但循环引用几乎总是指示数据模型问题,因此这不是一个大问题。

第二个选项是首先创建表,然后创建约束(即ALTER TABLE <<table name>> ADD CONSTRAINT ...)。这消除了在脚本中按顺序放置表的需要 - 首先放置所有表然后创建约束。但它将代码分离以从代码创建表以创建相关的约束,这可能使您更难以查看是否缺少约束。