我有這樣的數據庫,我設計。負整數索引:它們是邪惡的嗎?
它需要包含與我們提供的記錄一對夫婦十幾桌(一堆默認的),以及用戶可以添加記錄。爲了防止用戶在腳下自拍,有必要防止他修改默認記錄。
有很多方法來推動這項工作,但我喜歡的給予保護的記錄負整數索引的想法,同時保留0作爲無效記錄ID,並給用戶記錄正整數索引。
CREATE TABLE t1 (
ixt1 integer AUTOINCREMENT,
d1 double,
CONSTRAINT pk_ixt1 PRIMARY KEY (ixt1),
CONSTRAINT ch_zero CHECK (ixt1 <> 0)
);
-2 | 171.3 <- canned record
-1 | 100.0 <- canned record
1 | 666.6 <- user record
原因,這似乎不錯:
它不使用顯著更多的空間
很容易理解
它不需要大量的附加表實施
「選擇表*」獲取所有的相關記錄,沒有額外的間接
罐頭記錄可以在負方向生長,並且用戶記錄可以在正方向生長
然而,我對數據庫設計比較陌生。而使用這種解決方案一小會兒後,我開始擔心,使用負索引可能是壞的,因爲
負指標可能無法始終如一地不同的DBMS之間的支持,因此很難編寫代碼,是數據庫無關的
它可能是太容易通過recid 0
插入的東西它可能使它很難用工具擰東西了(如DB網格,也許),其期望與整數索引非負值。
也許還有一些其他真正明顯的原因會使這是一個非常糟糕的想法。
那麼,有什麼明確的答案?負整數索引是否邪惡?
我注意到你在這個主鍵上有'AUTOINCREMENT',這怎麼會最終與你的策略一起工作?你是手動計算所有新記錄的正確主鍵還是私人(負)記錄? – Nicole 2010-01-13 17:12:54
只有私鑰(負)纔會被明確設置。順便提一句,我不知道這個特定的SQL語法在任何DBMS上都能工作。這只是爲了說明。 – 2010-01-13 17:48:41