关于SQL7.0数据库(50分)

  • 主题发起人 主题发起人 dqj
  • 开始时间 开始时间
D

dqj

Unregistered / Unconfirmed
GUEST, unregistred user!

表:顾客
顾客ID 姓名 身份证地址 通信地址 销售日期 销售门市 售货凭证号 联系电话
在一些书上这样不符合标准,有冗余,比如 销售日期 销售门市 售货凭证号三个字段可以从另一个表销售得到
联系电话顾客有的有一个号码,有的有二个,甚至三个,所以联系电话可在另一个表中


折分后如下:
表:销售
销售ID 曰期 门市 售货凭证号 商品编码 数量 单价

表:顾客
顾客ID 姓名 身份证地址 通信地址 销售ID

表:联系电话
顾客ID 员工ID 往来单位ID 电话号码 传呼 传真
表:员工
员工ID 姓名 身份证地址 通信地址 文化程度 推荐人 工作时间 辞职时间
表:往来单位
往来单位ID 单位简介 联系人
表:编码
商品编码 商品名称 商品简介

关系
表:编码 表:销售
商品编码-----商品编码 表:顾客 表:联系电话
销售ID-----销售ID
顾客ID-------顾客ID 表:员工
员工ID--------员工ID 表:往来单位
往来单位ID-----------------往来单位ID
1.这样建表对不对?如果以后有仕么变化,如增加字段或减少字段,对数据的连续性有无影响?
2.表:联系电话 有大量的空值,如录入顾客ID,则员工ID和往来单位ID必是空值,丕有有电话的
不一定有传呼,有传真的不一定有手机,必然会有空值,
3.数据库SQL7.0,表:销售和表:顾客大约十万行记录,如果表分得很细,一个查询会联接许多表,是否影响性能?
4.现在建的表符合第几范式?
 
1、为什么不将 表:联系电话 中的内容分开放在 顾客 员工 往来单位
三个表中。
2、为什么销售中家顾客ID而是在顾客中加销售ID
3、用SQL语言查询注意优化,问题应该不大吧?
4、第几范式要仔细想一下/
 
1.以前是将表:联系电话 中的内容分开放在 顾客 员工 往来单位三个表中,有人说如果放在以上三个表中,电话字段可能是一个号码也可能是三个号码,这样设计极差,所以分在三个表中,我也觉得麻烦很多.
2.因为在录入销售时不知道顾客ID.
销售ID和顾客ID都是自动编号.录入程序是一个人先录入表:销售,另一人稍后在另一微机上录入表:顾客.再解释一下,录表:销售的人通过销售单录入,录表:顾客的人通过顾客登记表录入,在顾客登记表上有售货凭证号,查找表:销售的售货凭证号,找到销售ID,再录入.但是售货凭证号不是唯一的,录入员可以给合表:销售的售货凭证号和商品编码确定唯一.
 
1.以前是将表:联系电话 中的内容分开放在 顾客 员工 往来单位
三个表中,有人说如果放在以上三个表中,电话字段可能是一个号码
也可能是三个号码,这样设计极差,所以分在三个表中,我也觉得麻
烦很多.
2.因为在录入销售时不知道顾客ID.
销售ID和顾客ID都是自动编号.录入程序是一个人先录入表:销售,
另一人稍后在另一微机上录入表:顾客.再解释一下,录表:销售的人
通过销售单录入,录表:顾客的人通过顾客登记表录入,在顾客登记表
上有售货凭证号,查找表:销售的售货凭证号,找到销售ID,再录入.但
是售货凭证号不是唯一的,录入员可以给合表:销售的售货凭证号和商
品编码确定唯一.
不好意思没有注意换行.




--------------------------------------------------------------------------------



dqj, 对此问题,您可以:

接受答案,并为 烂泥 加上 50 点积分


仅仅添加注释,注释内容:(请您注意换行)

 
1.以前是将表:联系电话 中的内容分开放在 顾客 员工 往来单位
三个表中,有人说如果放在以上三个表中,电话字段可能是一个号码
也可能是三个号码,这样设计极差,所以建了一个新表,我也觉得麻
烦很多.感觉分得越细,表越多.
2.因为在录入销售时不知道顾客ID.
销售ID和顾客ID都是自动编号.录入程序是一个人先录入表:销售,
另一人稍后在另一微机上录入表:顾客.再解释一下,录表:销售的人
通过销售单录入,录表:顾客的人通过顾客登记表录入,在顾客登记表
上有售货凭证号,查找表:销售的售货凭证号,找到销售ID,再录入.但
是售货凭证号不是唯一的,录入员可以给合表:销售的售货凭证号和商
品编码确定唯一.
另外麻烦坛主将我前两个帖子删掉.
 
>>放在以上三个表中,电话字段可能是一个号码也可能是三个号码,这样设计极差
以你目前办法如果有三个电话号码,数据不是要如下了吗
表:联系电话
顾客ID 员工ID 往来单位ID 电话号码 传呼 传真
0001 Nil Nil 123
0001 Nil Nil 456
0001 Nil Nil 789
那你为什么不这样
表:顾客
顾客ID 姓名 身份证地址 通信地址 销售ID 电话号码 传呼 传真
0001 XXX xxxx xxxx xx 123 xx
0001 XXX xxxx xxxx xx 456 xx
0001 XXX xxxx xxxx xx 789 xx
如果多号码的不多,数据冗余问题也不大
适当的冗余并不是坏事!

>>表:销售 和表:顾客 大约十万行记录
你可以先生成几十万条记录试一下 select * from table where i in
(selec..)
语句,
有空看这个问题:
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/dispq.asp?LID=230659">小问题</a>


 
烂泥:
在顾客表中顾客ID是关键字,不能重复,而且如按你
的方法,重复录入的字段太多,单从录入员的角度看增加
了他们的工作量.
我想知道在类似的数据库中标准的解决办法,在我
以前的几个表中,每改变一次表结构,以前的数据几乎无
用了,希望每一次改变能保留以前的数据,平滑过渡.
 
>>每改变一次表结构,以前的数据几乎无用了
不会吧,你用Enterprise Manager还是其他的。
 
比如说表:顾客
顾客ID 姓名 身份证地址 通信地址
销售日期 销售门市 售货凭证号 联系电话
改为
表:顾客
顾客ID 姓名 身份证地址 通信地址 销售ID
以前没有销售ID字段,只有把以前的表:顾客放
在一边.
 
表:联系电话
ID,电话号码,传呼,传真,ID类型(0:顾客ID,1:员工ID,2:往来单位ID )
 
亲爱的caiaj,您的主意不赖.希望各位
友人多多讨论,帮忙我找出需要修改的
地方.多谢!
 
我还是不理解,按caiaj的方法如果有顾客有三个电话不是还要这样吗?

ID, 电话号码,传呼,传真,ID类型(0:顾客ID,1:员工ID,2:往来单位ID )
0001 123 0
0001 456 0
0001 789 0
 
ID, 电话号码,传呼,传真,对方ID ID类型(0:顾客ID,1:员工ID,2:往来单位ID )
0001 123 01 0
0002 456 01 0
0003 789 01 0
0004 567 11 2
我是这样理解的,不知对不?
 
上面方法不行,对方ID不能分别和顾客ID,1:员工ID,2:往来单位ID
建立关系,如果可以建立关系,ID类型就多余和无必要了.
 
你的 顾客ID,员工ID,往来单位ID 有重号吗?
如没有就直接用ID=(顾客ID,员工ID,往来单位ID)
肯定可以实现。

表:联系电话
ID,电话号码,传呼,传真,
表:员工
员工ID 姓名 身份证地址 通信地址 文化程度 推荐人 工作时间 辞职时间

查寻电话时
select 电话号码 from 联系电话 where ID='XXXX'
不就可以了吗?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
738
SUNSTONE的Delphi笔记
S
S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部