在归档表中添加外键约束

时间:2010-09-21 01:34:52

标签: database database-design relational-database

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

FOREIGN KEY (cusNo) REFERENCES Customers(cusNo)
FOREIGN KEY (flightNo) REFERENCES Flights(flightNo)

在归档表OldBooking中定义这些约束(外键)是否有意义?


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

OldBookings( cusNo flightNo ,日期)


3 个答案:

答案 0 :(得分:2)

在归档数据库中“复制”此类约束可以保护您免受存档过程本身中的缺陷

由您(或可能取决于您的用户)决定您是否希望保护档案免受此类缺陷的影响。

答案 1 :(得分:1)

在摘要中,我要说不要将BOOKINGS表分成CURRENT_BOOKINGS和OLD_BOOKINGS。如果你需要细分表,也许你可以使用分区来制作逻辑子表。

如果您确实需要维护脱机或二级系统历史记录,那么将OLD_BOOKINGS表反规范化以捕获平面记录结构中所需的信息通常不是一个坏主意,如下所示:

**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

答案 2 :(得分:0)

这取决于业务要求。

引用航班或客户的OldBookings行的存在不允许删除或移动该航班或客户。它确保OldBookings引用有效的航班和客户。