这样设计数据库合适吗?

星幻子 2012-07-30 10:34:29
主表字段
学号,姓名,性别,经手人,教师

经手人表
编号,经手人姓名

教师表
编号,教师姓名

请问:保存到主表 经手人 和 教师 字段 的数据是 保存 编号 还是 姓名合适?
我目前都会保存姓名,这样的话统计的SQL会容易写一点。

还有学生考试表我也是把全部需要的数据都保存到一起,比如
学号,姓名,性别,教师,考试成绩 等



还有我每张表都设置了一个自增的主键来防止出现完全一样的记录,这样做是否可行?

分不多还请各位帮帮忙
...全文
210 点赞 收藏 16
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
520bc 2012-08-22
我觉得大家都说得不够专业
每一个数据表最好建一个独立的ID作为主键
比如
ID,学号,姓名,性别,教师
经手人表
ID,经手人ID,姓名
经手人ID=主表中的ID
一般建数据表,都不建议采用不重复的数字编号作为主键,因为数字编号本身就存在长度、位数等不
可定因素的影响,所以每一个数据表都建议采用ID varchar(50)来建立
插入数据库的时候 ID=GetGuid;
函数如下:
function GetGUID:string;
var
AGUID : TGUID;
begin
CoCreateGuid(AGUID);
Result := GUIDToString(AGUID);
end;

单元引用 ComObj,ActiveX

回复
zczhangchao2003 2012-08-13
其实7楼已经说的很清楚了,可以仔细想想。5个表,5组自增ID
回复
星幻子 2012-08-06
楼上能否详细点?
谢谢
回复
haitao 2012-08-02
[Quote=引用 8 楼 的回复:]

楼上能详细点吗?
貌似都是 1对多的关系
目前比如我以教师分组统计学生时,可以直接 group by 学生表里的教师字段了
如果以ID储存的话是不是更麻烦点呢?
[/Quote]

编号,现在说不变,以后还是可能变的,如4位升6位。。。。。
id,则是真正不会变的
回复
cohye 2012-08-02
学生考试记录表
TID(自增键) 学号 考试科目 成绩
这样吧
回复
星幻子 2012-08-02
大家误会了,我把详细的表描述下
学生表
XID(自增键) 学号 姓名 身份证号码 报名经手人 教师
教师表
TID(自增键) 教师姓名
经手人表
JID(自增键) 经手人姓名
学生考试记录表
TID(自增键) 学号 学生姓名 考试科目 成绩 教师 报名经手人

目前各个ID字段我都是用来防止出现两个相同的记录的,没做他用
当添加新学员记录时,用类似dblookupcombobox来从 教师表 和 经手人表中选取对应的记录 保存到学生表中

当添加新的考试记录时,直接把 学员表对应的数据添加到 考试记录表中
这样我觉得 学号 学生姓名等就造成了重复录入的问题,我觉得不妥,所以来请教
回复
zoucp 2012-08-01
ID不会添加额外的负担。有这种担心是因为对SQL不熟吧。
回复
situduzhuo 2012-08-01
没有单一的识别字段,不然重名的会出问题
回复
星幻子 2012-08-01
楼上能详细点吗?
貌似都是 1对多的关系
目前比如我以教师分组统计学生时,可以直接 group by 学生表里的教师字段了
如果以ID储存的话是不是更麻烦点呢?
回复
火龙岛主 2012-07-31
[Quote=引用楼主 的回复:]
主表字段
学号,姓名,性别,经手人,教师

经手人表
编号,经手人姓名

教师表
编号,教师姓名

请问:保存到主表 经手人 和 教师 字段 的数据是 保存 编号 还是 姓名合适?
我目前都会保存姓名,这样的话统计的SQL会容易写一点。

还有学生考试表我也是把全部需要的数据都保存到一起,比如
学号,姓名,性别,教师,考试成绩 等



还有我每张表都设置了一……
[/Quote]

可以
使用编号,当更改姓名的时候,不至于导致数据无法对应的情况发生。
回复
kaikai_kk 2012-07-31
每个学生或者老师应该做一个编号
就像工厂里面的员工一样,都有一个工号
回复
liangpei2008 2012-07-31
看业务模型,如果学生和经手人、老师是多对多的关系,则信息需要用中间表存储。这样后期做数据统计可能会更有利一些。

1.学生表
2.经手人表
3.教师表
4.学生-经手人中间表
5.学生-教师中间表
回复
haitao 2012-07-31
肯定是编号了

其实,应该都增加一个id字段,使用id比编号还要好
回复
星幻子 2012-07-31
我想知道这样对于数据库性能有没有影响?或是设计原则方面的呢?
我的数据更改时做了限制的,比如 学生表中 经手人 的内容只能从 经手人表中获取
回复
洛阳逍遥游 2012-07-30
觉得不好,还是用各自的编号表示吧
回复
Oraclers 2012-07-30
如果没有同名同姓的人的话,可以用姓名,但如果以后出了一个同名同姓的话你这个数据库就有问题了。
回复
发动态
发帖子
数据库相关
创建于2007-08-02

2440

社区成员

Delphi 数据库相关
申请成为版主
社区公告
暂无公告