2012-05-10 35 views
0

我想在由用戶輸入和部分外鍵指定的部分ID組成的SQL表中設置一個屬性。例如:員工將有一個8字符長的ID,前4位是用戶將輸入的部分,最後4個字符將引用分支表以使用分部ID。外鍵在表屬性中檢查約束條件

它看起來像我需要使用CHECK約束來做到這一點,但我不確定如何強制執行屬性值的第二部分以確保它在另一個表中。

我希望Thq問題正確表達,因爲我仍然在學習SQL。

+0

什麼是_「SQL屬性」_? – gdoron

+2

「*,最後4個字符將引用分支表*」:永遠不會將兩個不同的東西存儲到一個列中。將4位用戶輸入放入一列,並將分支表的引用放入另一列。混合兩種不同的東西**會導致長期的麻煩。 –

回答

1

它看起來像我需要爲了做到這一點, 使用CHECK約束,但我不能確定如何執行屬性 值的第二部分,以確保它在其他表。

爲了「看」到另一個表中,您需要在CHECK約束中使用SELECT語句。據我所知,大多數SQL DBMS不會讓你這樣做。 (否則,標準SQL將使用斷言;我不確定任何 SQL dbms支持斷言。)

而是使用兩列 - 一列用於用戶提供的四個字符,另一列用於最後四個字符代表分支。你可以(也應該)使用

  • 在列CHECK約束存儲用戶提供的值,以保證它的四個 字符,而不是更少,
  • CHECK約束的列branches.branch_id保證它的 四個字符不少於,
  • branch_id上的外鍵約束,引用表分支。想想這是否應該級聯更新和刪除。

行爲可以保證外鍵約束條件給你很重要。他們保證,無論你在新表中使用branch_id的值是否存在於分支表中,並且如果使用的branch_id發生了變化,那麼這些變化也會記錄在新表中。 (如果級聯更新)。如果將這兩個值捆綁到一個列中,則不會得到這些保證。

最後4個字符將引用分支表以使用 分支標識。

你可以拷貝這樣的分支id,但你不能引用它。 參考是數據庫設計中的一個技術術語;它必須處理外鍵引用。