wai1id是wai1的主键(就是你的编号,比如说你的编号是1的话,你在wai2里面的朋友张三、李四、王五等等,他们的wai2id也都是1)
wai2id是外键 也就是说他是和wai1id相关联的 (你的朋友不会有自己的编号,而是由你的编号来表示)
外键没有讲谁是谁的外键这一说 外键的意思就是这个键是和另一个表的某个键相关联
1 右键需要建产外键的表,点击关联/外键
2 d出的窗口点击新增外键
3 选择关联的外键表,起好外键名,选择外键字段,确定就键好了
主键是每一行数据的标识列,首先一点他至少是唯一的,但是同时他又是外键,要知道外键是可以重复的,所以在正真使用的时候就会发生冲突,我给的建议是,要么B表根本不要主键,要么单独另起一个字段ID作为B表的主键,b字段就不要做主键了,经验之谈,楼主三思(1)诚如你所说,自增ID做一般做主键,但一般不作为唯一标示的依据,可以加一列比如员工编码(添加数据的时候要确保唯一)作为判断是否为统一员工的依据,至于数据重复,要在添加数据的时候做好严重,如果已经存在相同的编码,则不能再次插入,确保数据的唯一性(2)其实跟第一个问题是一回事,添加一个字段用户编码就解决问题了,至于delphi有哪个控件可以实现这个功能这个问题,这根控件没有关系,只要在数据库设置ID自动增长就可以了, 管理员在界面上添加信息时候,用户编码可以根据一定的规则确保唯一,可以有客户输入,也可以有程序自动生成,但必须验证其唯一性。你说的部门ID的问题看看dephi中有没有类似于下拉框的空间,我也好久没用不记得了,如果有的话直接使用就可以了,主键:即主码,是实体完整性,PRIMARY KEY,一般是定义某个列为主键,这样,这一列就不能出现相同的值
外键:参照完整性,FOREIGN KEY,是参照的另一个表的主键,这样就可以把两个基本表关联起来
希望对你有帮助o(∩_∩)o主外键的存在是依托两个实体之间的关系而存在的;
比如班级与学生的关系:
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?
因为,你想一想班级表内如果放学生那么记录可能就是这样:
1班ID 1班 xx同学id
1班ID 1班 xx同学id
这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;
下面简单给你讲下大概建成的表结构
--建班级表
create table class(
classid int primary key,--定义班级ID为主键
classname varchar(15)
)
--建学生表
create table students(
studentid int primary key,--定义学生ID为主键
classid int ,--外键值,跟班级表classid 属性类型相同
stuname varchar(20),--学生姓名
---定义外键
foreign key(classid) references class(classid) --本表classid是基于class表classid的外键
)
---------
如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如:
--在班级表为空的情况往学生表插入一条记录是不允许的:
insert into students(studentid,classid,stuname)values(1,1,'小明')
系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;
必须要先往班级表内插入一条记录:
insert into class(classid,classname)values(1,'一班')
后才能执行插入前面一条往学生表插入信息的语句
--------------可了解一些了?真累啊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)