现在我要根据事件类型在Event中插入数据。 但如果我有活动类型"假期"或者"病假"它不包含任何区域。在这种情况下,如何在事件表中填充数据。
由于事件类型"商务旅行"。
,区域表与之相关联感谢,
答案 0 :(得分:0)
如果没有任何区域与之关联,那么只需使用NULL
作为外键值:
INSERT INTO Event ( ID, Event_Type, User_ID, Start_Trip, End_Trip, Start_Date, End_Date )
VALUES ( 1, 'Sick Leave', 1, NULL, NULL, DATE '2016-02-29', DATE '2016-03-31' );
在这种情况下,Start_Trip
和End_Trip
列应该可以为空 - 如果这是一个问题,那么您可以将这些列上的NOT NULL
约束转换为CHECK
约束。即。
CHECK ( ( UPPER( Event_Type ) IN ( 'SICK LEAVE', 'VACATION' )
AND Start_Trip IS NULL
AND End_Trip IS NULL )
OR
( UPPER( Event_Type ) NOT IN ( 'SICK LEAVE', 'VACATION' )
AND Start_Trip IS NOT NULL
AND End_Trip IS NOT NULL )
)
如果添加了另一个应为null的事件类型,则会出现维护数据的问题,在这种情况下,开发人员必须修改表约束。 (可以通过包含事件类型表来解决,其中包含区域是否为NULL
的详细信息,然后将其用作Event
表中的外键。)
如果有一个区域是有意义的(例如,如果用户生病或休假,那么可能与他们的家乡区域相关联),那么使用适当的区域ID:
INSERT INTO Event ( ID, Event_Type, User_ID, Start_Trip, End_Trip, Start_Date, End_Date )
SELECT 1, 'Sick Leave', ID, Region_Id, Region_Id, DATE '2016-02-29', DATE '2016-03-31'
FROM PT_USER
WHERE ID = 1; -- The user's ID
您应该根据您的业务逻辑确定您应该做出的选择(我们无法帮助您)。