我的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表稍后会出现在代码中。任何帮助将不胜感激
答案 0 :(得分:3)
第一个选项是以正确的顺序创建表。由于flight
取决于route
和airline
,因此这些表格会显示在flight
之前。对于几乎任何正确设计的模式,应该可以按正确的顺序放置表,尽管它可能会有点乏味。如果您有循环引用(A
引用B
和B
引用A
),那么这不起作用。但循环引用几乎总是指示数据模型问题,因此这不是一个大问题。
第二个选项是首先创建表,然后创建约束(即ALTER TABLE <<table name>> ADD CONSTRAINT ...
)。这消除了在脚本中按顺序放置表的需要 - 首先放置所有表然后创建约束。但它将代码分离以从代码创建表以创建相关的约束,这可能使您更难以查看是否缺少约束。