数据库建表主键外键怎么创建合适
SQLSERVER2000中建立表时主键外键问题。比如想建立3个表,分别为职工信息表,部门表,职工工资表。其中想吧职工信息表作为主表,其他2个表为副表。在职工信息表中职工...
SQL SERVER 2000中建立表时主键外键问题。比如想建立3个表,分别为职工信息表,部门表,职工工资表。其中想吧职工信息表作为主表,其他2个表为副表。在职工信息表中职工编号为主键,在部门表中部门编号为主键,职工编号为外键。同样在职工信息表中,工资编号为主键,职工编号为外键。我这样设计可以么。
如果反过来,职工信息表中职工编号为主键,在这个表中有部门编号和工资编号字段,然后在部门表和工资表中部门编号是主键,工资编号是主键。这样建立联系可以么!急急急急急急急急急急急急! 展开
如果反过来,职工信息表中职工编号为主键,在这个表中有部门编号和工资编号字段,然后在部门表和工资表中部门编号是主键,工资编号是主键。这样建立联系可以么!急急急急急急急急急急急急! 展开
6个回答
展开全部
主外键的存在是依托两个实体之间的关系而存在的;
比如班级与学生的关系:
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的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,'一班')
后才能执行插入前面一条往学生表插入信息的语句..
--------------可了解一些了?真累啊.
比如班级与学生的关系:
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的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,'一班')
后才能执行插入前面一条往学生表插入信息的语句..
--------------可了解一些了?真累啊.
展开全部
表中不能存在2个可以作为主键的字段,比如A字段可以作为主键,如果A没有了B也可以做主键的话就没有意义了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“在职工信息表中职工编号为主键,在部门表中部门编号为主键,职工编号为外键。同样在职工信息表中,工资编号为主键,职工编号为外键。”应改为“同样在职工工资表中,工资编号为主键,职工编号为外键。”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就你说的第一种方案可行的
第二种设计上有误。
第二种设计上有误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都看蒙了,同意一楼的建E-R图分析完了在建表。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询