我的表格中有一列。它是可選的,所以它可以留空。但是,如果爲該列提供了值,則該值必須是唯一的。兩個問題:數據庫設計:可選,但如果提供值,則必須是唯一的
- 如何實現這在我的數據庫設計(我使用MySQL工作臺,順便說一句)
- 是否與我的模型一個潛在的問題?
我的表格中有一列。它是可選的,所以它可以留空。但是,如果爲該列提供了值,則該值必須是唯一的。兩個問題:數據庫設計:可選,但如果提供值,則必須是唯一的
只需在列上使用UNIQUE
索引。請參閱:
http://dev.mysql.com/doc/refman/5.1/en/create-index.html
的唯一索引創建約束 使得索引中的所有值必須 是不同的。如果您嘗試使用與現有行匹配的鍵值 添加新行,您會發生錯誤。對於所有 引擎,UNIQUE索引允許 對於 可以包含NULL的列允許多個NULL值。如果您爲UNIQUE 索引中的列指定 的前綴值,則在前綴內的列值必須爲 。
它可以爲空(而非空白)並且是唯一的。默認值可以爲null。對我來說沒有問題。
您可以在表上創建一個UNIQUE索引。在創建/編輯表格時,在UQ複選框的MySQL工作臺中。
第1步,ALTER
該表和MODIFY
該字段允許使用NULL
。
ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL;
第2步,在該字段中添加一個UNIQUE
索引。
ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field);
它的優良使用 - 我唯一的猶豫與把一個UNIQUE
指數可爲空的字段是不是認爲乍一看略有反直覺。
1)將列移動到一個新表中,使其唯一且不可爲空。只有當你有一個值時,你纔可以在這個新表中有一行。
2)是的。密鑰和密鑰依賴關係是關係數據庫設計中數據完整性的基礎。如果一個屬性應該是唯一的,那麼它應該被實現爲一個關鍵字。可以爲空的「鍵」根本就不是一個關鍵字,反正也不是必須的,因爲它總是可以移動到一個新表中,並且在不丟失任何信息的情況下不可刪除。
對(2)的回答。不,這很正常。 – 2010-11-30 21:03:10