0
我是oracle數據庫中的新手。我有三個表:防止強制性列中插入數據
現在我打算根據事件類型在事件中插入數據。 但如果我有事件類型「假期」或「病假」,其中不包含任何區域。在這種情況下,數據將如何填充到事件表中。
由於事件類型「商務旅行」,地區表與它連接。
感謝,
我是oracle數據庫中的新手。我有三個表:防止強制性列中插入數據
現在我打算根據事件類型在事件中插入數據。 但如果我有事件類型「假期」或「病假」,其中不包含任何區域。在這種情況下,數據將如何填充到事件表中。
由於事件類型「商務旅行」,地區表與它連接。
感謝,
如果有道理不具有任何與之相關的區域就用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
與否的詳細信息,然後使用這個作爲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
你應該應該由你的業務邏輯來決定哪一個選項(我們不能幫助你)。
感謝您的回覆。我將區域和事件之間的關係從強制變爲可選,現在我可以使用具有可爲空值的開始和結束行程的區域表。 –