200分技术分白花了,再问个数据库的问题

以前有个数据库部门科室是放一个表中的
id 部门 科室
1 行政 财务科
2 行政 业务科
……
现在我用一下数据建立两个表,但是不知道这两个设计那哪个更好,初次设计希望多多指教
SQL code

create table Dept
(
deptId int not null primary key identity (1,1),
deptName varchar(60),
)
insert into Dept(deptName) select distinct 部门 from 部门科室表
create table Section
(
sectionId int not null primary key identity(1,1),
deptId int not null foreign key  references Dept(deptId),
sectionName varchar(60)
)
declare @i int 
set @i=1
while @i<=(Select max(deptId)from Dept)
begin
 insert into Section(deptId,sectionName)
     select @i,科室 
     from 部门科室表 inner join Dept on Dept.deptName=部门科室表.部门
     where deptId=@i
 set @i=@i+1
end

作者: wxxloveu   发布时间: 2011-06-09

SQL code
 肯定是现在的比以前的好,比较符合范式,冗余数据少,并且如果要修改 部门名字只需要修改一处
 等等。。。。。

作者: abcjun188   发布时间: 2011-06-09

引用 1 楼 abcjun188 的回复:
SQL code
肯定是现在的比以前的好,比较符合范式,冗余数据少,并且如果要修改 部门名字只需要修改一处
等等。。。。。

谢谢,但是查询起来需要连接两个表,会不会慢?

作者: wxxloveu   发布时间: 2011-06-09

部门也好,科室也好,都是层次结构的关系,所以不管哪一个都不好,设计成层次关系是最佳的。

作者: dotbyte   发布时间: 2011-06-09

貌似就是个主从表关系,不用设计的太麻烦。

作者: maco_wang   发布时间: 2011-06-09

要看具体业务要求,
这种小表,你改后的业务逻辑需求跟以前没多大差别,

作者: you_tube   发布时间: 2011-06-09

引用 5 楼 you_tube 的回复:
要看具体业务要求,
这种小表,你改后的业务逻辑需求跟以前没多大差别,

对的,现在就是想学习数据库查询那块,怎么样的设计会有什么样的查询语句,从而影响到查询的效率

作者: wxxloveu   发布时间: 2011-06-09

如果只单纯的做基表用,我觉得以前的逻辑设计更加合理,方便,
只不过多点数据冗余

作者: you_tube   发布时间: 2011-06-09

引用 6 楼 wxxloveu 的回复:

引用 5 楼 you_tube 的回复:
要看具体业务要求,
这种小表,你改后的业务逻辑需求跟以前没多大差别,

对的,现在就是想学习数据库查询那块,怎么样的设计会有什么样的查询语句,从而影响到查询的效率

如果做基表用,基本不存在查询效率问题,,,
第一种设计方式取数更加紧凑,效率高
第二种设计,更加规范点,实际应用当中反而有多多不便...

作者: you_tube   发布时间: 2011-06-09

引用 3 楼 dotbyte 的回复:
部门也好,科室也好,都是层次结构的关系,所以不管哪一个都不好,设计成层次关系是最佳的。

学习了,要怎么设计呢?层次?

作者: wxxloveu   发布时间: 2011-06-09

引用 7 楼 you_tube 的回复:
如果只单纯的做基表用,我觉得以前的逻辑设计更加合理,方便,
只不过多点数据冗余

对的,是做基础数据使用的,其他数据表中的数据都是从这个表中读取的,一般设计要遵循什么呢

作者: wxxloveu   发布时间: 2011-06-09

引用 10 楼 wxxloveu 的回复:

引用 7 楼 you_tube 的回复:
如果只单纯的做基表用,我觉得以前的逻辑设计更加合理,方便,
只不过多点数据冗余

对的,是做基础数据使用的,其他数据表中的数据都是从这个表中读取的,一般设计要遵循什么呢

业务,范式...

作者: you_tube   发布时间: 2011-06-09