假设我有这些表,而Oldbookings是一个存档表,其中包含一年前预订的行。此外,假设已在预订中定义了此类约束:
FOREIGN KEY (cusNo) REFERENCES Customers(cusNo)
FOREIGN KEY (flightNo) REFERENCES Flights(flightNo)
在归档表OldBooking中定义这些约束(外键)是否有意义?
客户( cusNo ,cusName,DOB)
航班( flightNo ,目的地)
预订( cusNo , flightNo ,日期)
OldBookings( cusNo , flightNo ,日期)
答案 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引用有效的航班和客户。