SQL 设计心得、逗号分隔列表
第一:
在开始编码前、主要关注数据库里要保存什么样的数据,以级最佳的数据组织方式和内在关联方式。
第二:
使用你所知的数据库特性尽可能高效的实现数据管理。如正确的索引、数据库类型、高效的select!
---------------------------------------------------------------------------------------------------------------------------------
下面将会讲解、《逗号分隔列表》引起的一些数据库问题、Coders表用户记录程序员和他用的程序设计语言这个表只是为了引出这本主题相关的问题
create table Coders(--程序员表
Name varchar(16) primary key --姓名
Languge varchar(8)--程序语言
);
一般来说在工司只一门语言就可以了。比如我用的就是SQL 。也就是说
insert into Coders(Name,Languge) values('蒋乐哥哥','SQL');这样一行就可以表达了。好了问题来了、小公司一般来说它要的是一个“全才”也就是说我可能还要写C#
所以刚才的insert 不可这样写、要像下面的这个一样才可以表达好。
insert into Coders(Name,Languge) values('蒋乐哥哥','SQL、C#');
问题:
1、可拓展性不好、也就说是如果公司不只是要求你会SQL、C#、HTML、XAML、JS、、、、、等等这样这个列是保存不了这么多的。
2、对于聚合不方便、比如说统计一下蒋乐哥哥会几种语言?想想要什么写。
3、数据库完整性不能得到保护、insert into Coders(Name,Languge) values('蒋乐哥哥','湖南话');看到了吧“湖南话”就目前来说是不算编程语言的。当是这句insert 是不会
报错的。
4、性能问题、如找会C#程序员 select Name from Coders where Languge like '%C#%;可以看到这个select 是就算是有索引也是用不到的。
解决方案:
create table Languges(LangugeID int primary key,LangugeName varchar(8));--建立一个编程语言表别的表都要参照这张表。
create table Contact(
LangugeID int ,
Name varchar(8),
constraint FK_languge foreign key(LangugeID) references Languges(LangugeID),
constraint FK_Name foreign key(Name) references Corders(Name));