表的最佳设计是什么,Type字段是int还是char(1)?换句话说,给定此架构:
create table Car ( Name varchar(100) not null,Description varchar(100) not null,VehType .... not null )
为了使VehType成为int或char(1),它是否更有效(性能明智)?假设你有五种类型的汽车,你应该使用递增值0 – > 4,或类型的字符(比如说’v’,’s’,’c’,’t’,’m’)?
如果它不止于此,我将使用一个单独的Type表并具有外键关系,但我认为没有必要.
我注意到sys.objects目录视图使用类型字段的字符.这有什么理由吗?我只是在这里勉强抓住,是不是我觉得更舒服?
解决方法
你通常使用1字节的tinyint
> char(1)会稍慢,因为比较使用整理
>困惑:什么是S:SUV或Saloon or Sedan还是体育?
>在添加更多类型时使用字母限制您.见最后一点.
>我见过的每个系统都有一个以上的客户端,例如报告.将V,S变为“Van”,“SUV”等的逻辑将需要重复.使用查找表意味着它是一个简单的JOIN
> extendibility:再添加一个类型(“F”表示“Flying car”),您可以将一行添加到查找表中或更改大量代码和约束.而你的客户端代码也是因为这必须知道V,S,F等是什么
>维护:逻辑分为3个位置:数据库约束,数据库代码和客户端代码.使用查找和外键,它可以在一个地方
在使用单个字母的正面…呃,看不到任何
注意:有一个相关的MySQL question about Enums.建议也使用查找表.