0
UUID時,我已經得到了在DB2(V9.5)的數據庫表像下防止重複行:使用主鍵
CREATE TABLE license(key CHAR(16) FOR BIT DATA NOT NULL PRIMARY KEY,
name VARCHAR(32) not null,
startDate TIMESTAMP not null,
data XML);
(我用的UUID主鍵,如圖this guide)
我的問題是防止重複條目之一。我的重複標準如下:
- 重複的列值是可以的。例如值「Fred」可以 在表中多次出現
- 重複的行(忽略
key
)不正確。即,對於name
和startDate
和data
,兩行不能具有相同的值。
我看到它的方式,我有幾個選擇:
- 使用的東西,我在DB2配置遺漏,以確保該列值的組合(即
name
和startDate
和data
)必須在表中是唯一的 - 我只是簡單地選擇了主鍵。我是否應該將組合字段的值散列到SHA-1散列(這是一個好還是不好的選擇?),然後將其用作主鍵。如果是這樣,我可以將字段的字符串連接成一個長字符串,並使用BouncyCastle爲我執行heavy-lifting?
- 在執行INSERT之前,請在表格中搜索我即將插入的行,如果已存在,請不要插入它。我不知道這種效率(甚至不知道如何去做 - 我的DB2 XML知識目前有點缺乏 - 但這也許值得另外一個問題)。
- 還有別的嗎?
可以在可爲空的列上進行獨特的約束;但你只能有一行NULL。只有主鍵約束需要NOT NULL。 –
@ Ian Bjorhovde:我再次不同意你的看法(參見http://stackoverflow.com/questions/3828147/using-prepared-statement-without-row-number-and-over-functions-in-db2/3829806#評論-4070510)我在Linux上的DB2 v9.7上測試了這一點。如果列可以爲空,則DB2響應:不能是主鍵或唯一鍵的列,因爲它可以包含空值。SQLCODE = -542,SQLSTATE = 42831。你使用的是什麼DB2版本和操作系統? – boes
如果有幫助,列總是不爲空(即我將始終有數據) – Catchwa