数据库的主键和外键

大家好,菜鸟问几个问题,希望知道的朋友能给我解答一下。我看资料说数据库表的主键最好使用自动编号类型的,这样保证了主键的无重复性和免于维护。但是有一个问题,由于采用了自动编... 大家好,菜鸟问几个问题,希望知道的朋友能给我解答一下。
我看资料说数据库表的主键最好使用自动编号类型的,这样保证了主键的无重复性和免于维护。但是有一个问题,由于采用了自动编号,虽然主键不重复,但是其他数据内容容易重复。比如:现有数据表员工表
员工ID 员工姓名 性别 年龄 身份证号
1 张三 男 23 123456
2 李四 男 35 111000
3 张三 男 23 123456
对于这些数据,以员工ID为主键,虽然主键没有重复,但是很明显1 和 3 属于同一个人。导致了大量的数据冗余。请问这样情况如何避免呢?我以为用身份证作为主键为好,可是有点朋友说,身份证有18位和15位的,并且容易改动,所以不适合做主键。有请朋友给点答案。
二,主键和外键的关系中,我们往往希望外键显示不是主键的编号,而是主键的具体名称。比如员工表和部门表中,员工表里有个部门ID字段,作为外键用于和部门表相联。现在问题是,在输入员工资本资料的时候,不希望出现部门ID这样字段,不具有直观性,而是希望那个输入框能够使,部门名称。当然保存的时候部门名称和部门ID相对,还是保存部门ID在员工数据表里。请问这个在delphi有哪个控件可以实现这个功能?
盼望高手指点,不胜感激。
展开
 我来答
zjy198518
2011-10-24 · TA获得超过867个赞
知道小有建树答主
回答量:777
采纳率:80%
帮助的人:563万
展开全部
(1)诚如你所说,自增ID做一般做主键,但一般不作为唯一标示的依据,可以加一列比如员工编码(添加数据的时候要确保唯一)作为判断是否为统一员工的依据,至于数据重复,要在添加数据的时候做好严重,如果已经存在相同的编码,则不能再次插入,确保数据的唯一性
(2)其实跟第一个问题是一回事,添加一个字段用户编码就解决问题了,至于delphi有哪个控件可以实现这个功能这个问题,这根控件没有关系,只要在数据库设置ID自动增长就可以了, 管理员在界面上添加信息时候,用户编码可以根据一定的规则确保唯一,可以有客户输入,也可以有程序自动生成,但必须验证其唯一性。你说的部门ID的问题看看dephi中有没有类似于下拉框的空间,我也好久没用不记得了,如果有的话直接使用就可以了,
牧之卉0j1
2011-10-24 · TA获得超过1150个赞
知道大有可为答主
回答量:1689
采纳率:0%
帮助的人:1727万
展开全部
1,主键是聚集索引 不适合常修改 记录也不易太大,用数字自增是最佳的
至于别的列要唯一,加唯一约束即可。
2,程序里或sql语句做连接即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
疯虫子cc
2011-10-24 · 超过14用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:33.9万
展开全部
身份证号是很适合做主键的,因为它不重复,身份证号怎么可能容易改动。你见过有哪个人改过身份证号的吗?18位还是15位并不影响它做主键。

delphi我不懂,直接用sql把部门名称select 出来不就行了吗?
select 员工名称,部门名称
from 员工表 a,部门表 b
where a.部门id = b.部门id and a.员工id = '员工id'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
熊妙婧Qu
2011-10-24 · TA获得超过165个赞
知道答主
回答量:130
采纳率:0%
帮助的人:67.9万
展开全部
首先呢。为何会有重复数据进入啊。。。。。

用省份证号呗。你朋友说省份证号居然会容易改动?你问他 他这辈子改过几次了?

一般 都用id自动增长的啦 或者 你用员工的工号不就解决问题了?
工号总不见得重复了吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式