回答
我喜歡使用varchar,然後在映射到正確值的代碼中聲明常量。我經常在列的評論中列出可能的值及其含義。
使用varchar比使用tinyint效率低(就像Aju John在他的評論中提到的那樣),但除非我正在處理一個真正關鍵性能或巨大的表 - 我發現處理起來更容易。它允許我在手動從表中選擇數據和調試代碼時(即不用記住每個數字意味着是否使用整數列)來理解實際值,並且在大多數情況下,效率和便捷之間的這種折衷是非常值得。
當你說未來價值可能會發生變化時,我認爲你回答了你自己的問題:你必須切換到一種數據存儲一次和中央位置的方法(而不是分散在整個數據庫中)。換句話說,一個主表。
另一個好處是對值的更改不需要DDL命令(ALTER TABLE
),而是簡單的DML命令(INSERT INTO
,UPDATE
)。這甚至允許寫一個簡單的管理。
例如:
CREATE TABLE car (
car_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
plate VARCHAR(20) NOT NULL,
color ENUM('White', 'Black', 'Red', 'Blue'),
PRIMARY KEY (car_id),
);
...被替換爲:
CREATE TABLE car (
car_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
plate VARCHAR(20) NOT NULL,
color_id INT(10),
PRIMARY KEY (car_id),
CONSTRAINT car_fk1 FOREIGN KEY (color_id) REFERENCES color (color_id)
);
CREATE TABLE color (
color_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (color_id),
UNIQUE INDEX name (name)
);
不用說,你可以重複使用在具有顏色的任何其他實體的顏色定義。
您的意思是爲在表格中用作枚舉的所有值創建引用表的權利? –
我想這樣...我不能給東西專名,因爲我不知道你的專欄代表什麼,但我已經給我的答案添加了一個例子(警告:代碼沒有經過測試。) –
- 1. 類型化數據集的替代方案?
- 2. MySQL數據類型:int與enum
- 3. Mysql mysql_num_rows($ result);替代方案
- 4. MySQL LIKE替代方案
- 5. XslTransform類的替代方案
- 6. liquibase的enum數據類型
- 7. MySQL ENUM列類型
- 8. 原型在Javascript中的替代方案
- 9. 數據URI或sprites的替代方案?
- 10. Microsoft SQL Server 2008 Management Studio中的替代Enum數據類型是什麼?
- 11. javascript中的正則表達式mysql的enum數據類型
- 12. 什麼是C++方案的標記數據的替代方案
- 13. 類型安全的替代方案中的AsyncTask
- 14. 在MySQL中是否有替代SQL-Server的uniqueidentifer數據類型?
- 15. MySQL全文搜索的替代方案
- 16. MySQL查詢:INFORMATION_SCHEMA.TABLES的替代方案
- 17. 針對替代方案的Mysql匹配
- 18. 發佈提取數據替代方案()
- 19. 多維數據處理替代方案
- 20. 泛型類型屬性的任何替代解決方案?
- 21. 替代Java Enum
- 22. ENUM替代品
- 23. enum的替代方法 - 播種數據庫時
- 24. 存儲除mysql,sql等數據庫之外的數據的替代方案
- 25. MongoDB類似SQLite的替代方案?
- 26. ENUM數據類型的索引
- 27. SQL Server 2005是否與MySql的ENUM數據類型等效?
- 28. mysql內連接int和enum數據類型的兩個表格
- 29. 在MySQL中創建ENUM變量類型
- 30. 用於生成實體類型的Scaffold-DbContext的替代方案
要用作ENUM備用數據的最佳數據類型是tinyint –