我有一個要求,我需要根據兩列來唯一地識別一行。
nType | dType | severity
------ ------- ----------
下 | 6500 | CRITICAL
nType和dType的組合應該始終是唯一的。因此,我使用
CREATE TABLE IF NOT EXISTS severitymapping(nType text。dType text, severity text,
PRIMARY KEY(nType,dType)。
但是,可能有一種情況是dType為空。所以,這對我的業務邏輯來說也是獨一無二的。但是資料庫不允許dType的空值/空值出現在資料庫中。
有什么方法可以做到這一點嗎?
uj5u.com熱心網友回復:
只適用于MySQL(問題是MySQL標記的)。
主鍵運算式
主鍵運算式不能包括NULLable列。
如果你需要某些列的值是NULL(不是 "空"--在SQL中沒有這樣的術語),那么你不能創建包括這個列的PRIMARY鍵。但是你可以創建UNIQUE索引--它允許NULL。在這種情況下,你需要在另一個運算式中成為主鍵--自動遞增的合成PK是合理的。
另外,每個列的資料型別必須是合理的--顯示的值和TEXT資料型別不匹配。nType的VARCHAR和dType的INT看起來更合適。
如果沒有指定索引前綴的長度,TEXT列就不能在索引中使用。
所以使用接近于
的東西CREATE TABLE IF NOT EXISTS severitymapping(
nType VARCHAR(255)。
dType INT。
嚴重性TEXT。
UNIQUE(nType, dType)。
id INT AUTO_INCREMENT PRIMARY KEY
);
uj5u.com熱心網友回復:
在Cassandra的主鍵中,不可能有一個空或空值的任何列。
磁區鍵(nType)唯一地標識了磁區,其哈希值決定了它所存盤的節點。
聚類鍵(dType)唯一地標識了磁區中的一行。沒有它,就不可能在磁區中存盤該行,因為沒有聚類鍵就不能檢索該行。干杯!
uj5u.com熱心網友回復:
在你的案例中,你將nType作為磁區鍵,將dType作為聚類鍵。
Cassandra不允許空的聚類鍵值。
如果你真的因為某些原因需要 "無值",那么就使用一個空字串或者其他一些特殊的字面價值,比如 "未定義",來把這些東西聚在一起。
這個問題也可以幫助你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332010.html
標籤:
上一篇:使用Flex將圖示與文本水平對齊
下一篇:如果連續的行是匹配的,就合并它們
