我对我的汽车系统的数据库设计感到困惑(我父亲拥有经销商,我想为他建立一个新的系统,用户可以安排测试驱动器,apptointmen等......)
我不确定这两种模式:
table car
id int, model_id int, make_id int, price float, year year, millage int, etc...
或
table car
id int, model enum, make enum, price float, year year, millage intetc...
客户表(id int,name varchar,phone int,street varchar,city等...
salemen 表(id int,name varchar等...
计划表(id int,appt_Date datetime,car_id,customer_id,salemen_id)
现在我的问题是:
我应该使用枚举字段还是应该为每个枚举字段设置一个表?一旦所有人都在使用它并重新开始,我不想重新设计系统。
感谢
答案 0 :(得分:4)
我的偏好是第一个选择。使用int作为相应其他表的外键。这样,您可以向其他表添加行,并自动显示“枚举”值。
您可能希望在某些时候发布您建议的表格以获得一般的规范化帮助:)
答案 1 :(得分:4)
我从未使用过enum字段。
很可能,您将使用PHP之类的工具在此基础上构建应用程序。您可以通过http://barrenfrozenwasteland.com/?q=node/7
中记录的方法从数据库中获取值这比从单独的表中获取可能的值更加尴尬。
对于单独的表,您将具有更大的灵活性,因为您不需要授予Web用户更新表定义本身的权限。在枚举字段中似乎也存在10,000个不同值的限制。
答案 2 :(得分:4)
出于一个主要原因,我会远离ENUM。如果要添加新项目,则必须更改表格。如果您有大量数据,这可能会很痛苦。此外,根据您使用的排序规则和字符集,您还要注意区分大小写。
阅读这篇文章了解更多信息:8 Reasons Why MySQL's ENUM Data Type Is Evil。
现在使用外键使用引用数据/表是首选,因为您可以拥有数据完整性规则。您可以构建一个简单的工具来管理这些数据(make或model),而无需更改或更改任何数据库模式。
答案 3 :(得分:1)
请勿使用ENUM
。
为什么呢? 8 reasons.