2012-03-16 64 views
1

我想知道makumba如何在涉及空字段時處理多個字段之間的唯一性驗證規則。MDD唯一性驗證規則

例如: A =不空不空字符... B = PTR ... 唯一的(A,B)

在 'B' 是無效的情況下,會發生什麼事。這個檢查是用'+ null'完成還是會被繞過?

回答

1

有兩種不同的情況

(1)如果驗證規則從一個MDD僅涵蓋領域,那麼這將轉化爲在數據庫級別上唯一約束,以及如何被處理的有可能是因在使用的數據庫引擎上。

在MySQL,空值被允許重複(http://dev.mysql.com/doc/refman/5.1/en/create-table.html)

的唯一索引創建一個約束這樣索引中的所有值必須是不同的。如果嘗試使用與現有行匹配的鍵值添加新行,則會發生錯誤。對於所有引擎,UNIQUE索引允許可以包含NULL的列的多個NULL值。

即,你實際上可以擁有相同的記錄!

您可以驗證:

mysql> CREATE TABLE example (data1 VARCHAR(100), data2 varchar(100), data3 varchar(100)); 
mysql> alter table example add unique index(data1, data2, data3); 

mysql> insert into example values ("a", "a", "a"); 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into example values ("a", "a", "a"); 
ERROR 1062 (23000): Duplicate entry 'a-a-a' for key 'data1' 
mysql> insert into example values ("a", "a", null); 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into example values ("a", "a", null); 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into example values ("a", "a", null); 
Query OK, 1 row affected (0.00 sec) 
mysql> insert into example values ("a", "a", null); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from example; 
+-------+-------+-------+ 
| data1 | data2 | data3 | 
+-------+-------+-------+ 
| a  | a  | NULL | 
| a  | a  | NULL | 
| a  | a  | NULL | 
| a  | a  | NULL | 
| a  | a  | a  | 
+-------+-------+-------+ 

所以,如果適用,你可能要一個不能爲空的語句添加到有問題的領域。 (2)如果規則也覆蓋來自其他MDD的字段(例如,通過ptr字段),則將通過查詢來檢查 - 如果已經存在與查詢相匹配的記錄,則唯一性檢查將投訴。 在這種情況下,null應該視爲任何其他值;即你不應該能夠有兩個記錄有兩個相同的記錄

+0

確切地說我需要知道的。謝謝! – 2012-04-29 16:52:51