Database 在存档表中添加外键约束

Database 在存档表中添加外键约束,database,database-design,relational-database,Database,Database Design,Relational Database,假设我有这些表,Oldbookings是一个存档表,其中包含一年前预订的行。此外,假设此类约束已在预订中定义: FOREIGN KEY (cusNo) REFERENCES Customers(cusNo) FOREIGN KEY (flightNo) REFERENCES Flights(flightNo) 在归档表中定义这些约束(外键)有意义吗 客户(cusNo,cusName,DOB) 航班(航班号,目的地) 预订(cusNo,flightNo,日期) 旧预订(cusNo,flight

假设我有这些表,Oldbookings是一个存档表,其中包含一年前预订的行。此外,假设此类约束已在预订中定义:

FOREIGN KEY (cusNo) REFERENCES Customers(cusNo)
FOREIGN KEY (flightNo) REFERENCES Flights(flightNo)
在归档表中定义这些约束(外键)有意义吗


客户(cusNo,cusName,DOB)
航班(航班号,目的地)
预订(cusNoflightNo,日期)

旧预订(cusNoflightNo,日期)



这取决于业务需求


如果存在引用航班或客户的OldBookings行,则不允许删除或移动该航班或客户。它确保旧预订引用有效的航班和客户。

在摘要中,我要说的是不要将预订表分为当前预订和旧预订。如果需要细分表,也许可以使用分区来生成逻辑子表

如果您确实需要维护离线或辅助系统历史记录,通常最好对旧的预订表进行非规范化,以便在平面记录结构中捕获所需的信息,如下所示:

**BOOKINGS**
BOOKING_ID
CUSTOMER_ID
FLIGHT_ID
...

**OLD_BOOKINGS**
BOOKING_ID
CUSTOMER_ID
CUSTOMER_COLUMN_1
...
CUSTOMER_COLUMN_N
FLIGHT_ID
FLIGHT_COLUMN_1
...
FLIGHT_COLUMN_N
BOOKING_ATTRIBUTE_1
...
BOOKING_ATTRIBUTE_N
在归档数据库中“复制”此类约束可以防止归档过程本身存在缺陷


取决于您(或者可能取决于您的用户)来决定是否要保护您的档案免遭此类缺陷。

然而,出于各种原因,有时预订和旧预订存储在不同的数据库中。我是一个Oracle人员,所以我不知道您所说的“不同数据库”是什么意思“不同的数据库。”我确实认为,如果要将旧预订与当前预订分开存储,可能不应该同时引用同一航班表和客户表,这意味着您应该将旧预订非规范化,或者必须将它们复制到航班表和客户表中。