我有一個數據庫表,它有一個類型爲uniqueidentifier
的非空列。這是在不久的將來使用。但現在,我需要使用一些佔位符。我可以簡單地使用:我可以使用什麼GUID作爲佔位符
00000000-0000-0000-0000-000000000000
所有行,直到一個真正的GUID插在未來,當新行使用? SQL Server是否強制在此列上使用唯一性?
我有一個數據庫表,它有一個類型爲uniqueidentifier
的非空列。這是在不久的將來使用。但現在,我需要使用一些佔位符。我可以簡單地使用:我可以使用什麼GUID作爲佔位符
00000000-0000-0000-0000-000000000000
所有行,直到一個真正的GUID插在未來,當新行使用? SQL Server是否強制在此列上使用唯一性?
SQL Server將強制唯一性,IF且僅當你穿上了那場唯一約束或唯一索引。否則,SQL Server將只強制該值必須爲NOT NULL。
正如marc_s所說,你可以這樣做,因爲即使在沒有明確聲明的唯一索引/約束的表的同一列中,uniqueidentifiers也不會被強制執行(畢竟,兩行可以合法地擁有相同的外鍵) 。
IF這只是一個暫時的引導,並在未來唯一真正的GUID(NOT NULL)會被允許,我覺得這是一個不錯的解決辦法,以避免產生其只需要在以後更換的GUID和所以不需要保留一個單獨的部分初始化的標誌列或臨時行的表,以便稍後可以填寫適當的GUID。
但是從設計的角度來看,我更關心這個特殊的保留GUID的語義,以及爲什麼允許一個特殊的保留值是OK,但NULLs不是。就像我說的,如果它只是暫時的並處於穩定狀態,那麼您不希望允許NULL或這個特殊的保留0,這很好,但是如果您要繼續允許這個特殊的保留GUID處於穩定狀態我認爲這提出了設計問題。
是否意味着成爲外鍵?如果是這樣,則可以使用NULL(但不包含在引用表中的保留鍵值不爲0)。如果這是一個鬆散的關聯,將GUID存儲在此表中可能不是一個好設計。
+1。 「NULL」的含義是「未知」或「未定義」 - 如果列可能具有未知值,那麼它應該是空的!空的uuid並不比空字符串好。 – Aaronaught 2010-01-23 15:58:56
@Aaronaught,NULL解釋確實是一個蠕蟲的罐頭。在任何列設計中都應首先考慮NOT NULL,但在單個保留值之前應優先使用帶單一解釋的NULL。那麼如果需要多個保留值(DateOfDeath:1 - 沒有死亡,2個未知日期),那麼設計就需要考慮如何可靠地處理這個問題,並確保完整性和一致性以及防止插入和誤解的周界防禦。 – 2010-01-23 16:08:46
Cade,雖然我一般同意你的看法,但在這種情況下,似乎NULL對於「魔術」/虛擬值/佔位符是一種可行的選擇,至少在設計的其餘部分出現之前。 – 2010-01-24 04:46:42
非常真實,這完全取決於你 – Pieter888 2010-01-23 15:24:20