use student
create table S(
s_id int primary key,
name varchar(20),
sex char(2),
brith datetime,
department varchar(20)
)
create table C(
c_id int primary key,
course varchar(20),
class_hour int
)
create table SC(
s_id int,
c_id int,
score int
)
SC表是中间表,多对多的关系,一个学生可以选修多门课程,一个课程可以被多个学生选修
建立外键,但是真实的系统当中可以不建立外键,只建立主键,只在查表当中关联查询键
alter table SC constraint FK_sID foreign key(s_id) references S(s_id) 中间表外键引用主表的主键
alter table SC constraint FK_cID foreign key(c_id) references C(c_id)
表关联查询 某某同学,某某课程,分数是多少
select S.name , C.course , SC.score
from S , C , SC
where S.s_id=SC.s_id and C.c_id=SC.c_id
一对一:在这种关系中,关系表的每一边都只能存在一个记录。每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规范化的规则。一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于你和你的父母之间的关系。你只有一位母亲,但是你母亲可以有几个孩子。多对多:两个数据表里的每条记录都可以和另一个数据表里任意数量的记录(或者没有记录)相关。例如,如果你有多个兄弟姐妹,这对你的兄弟姐妹也是一样(有多个兄弟姐妹),多对多这种关系需要引入第三个数据表,这种数据表称为联系表或者连接表,因为关系型系统不能直接实现这种关系。建立关系在开始着手考虑建立关系表之间的关系之前,你可能需要对数据非常熟悉。只有在熟悉数据之后,关联会比你刚开始的时候更明显。你的数据库系统依赖于在两个数据表中找到的匹配值来建立关系。如果在数据库系统中发现了一个匹配值,系统将从两个数据表中提取数据并创建一个虚拟的记录。例如,你可能想要查看某个特定的作者所写的全部书籍,在本文中,系统将从“Books”和“Authors”这两个数据表中查找相关的匹配值。需要注意的是,在大多数情况下,查询的结果是动态的,这意味着对这条虚拟记录所做的任何改动都将可能作用到底层的数据表上,这一点是非常重要的。进行匹配的值都是主键和外键的值。(关系模型不要求一个关系必须对应的使用一个主键来确定。你可以使用数据表中的任何备选关键字来建立关系,但是使用主键是大家都已经接受的标准。)主键(primary key)唯一的识别表中的每个记录。而外键(foreign key)只是简单的将一个数据表中的主键存放在另外一个数据表中。同样地,对于你来说也不需要做太多的工作——只是简单地将主键加到关系表中,并将其定义为外键。唯一需要注意的是,外键字段的数据类型必须和主键的数据类型相同。但是有些系统可以允许这条规则有一个例外,它允许在数字和自动编号(autonumbering)字段(例如在SQL服务器系统中访问Identity和AutoNumber)之间建立关系。此外,外键的值可以是空(Null),尽管强烈建议在没有特别原因的情况下,不要让外键为空。你有可能永远都不会有机会来使用需要这项功能的数据库。通过表的主键(pk)和另一个表的外键(fk)建立连接具体可以创建关系图建立
也可以通过查询分析器利用SQL语句建立
例如:
主键表A,外键表B,我要创建表A的字段fa与表B的字段fb之间的关系,并且要级联更新相关的字段,级联删除相关的记录。
create table 表A(
fa varchar(10)
constraint PK_主表 primary key --定义fa为主键
)
create table 表b(fb varchar(10) not null
,CONSTRAINT FK_从表_主表 FOREIGN KEY (fb) REFERENCES 表A( fa) --在fb上定义外键约束
ON UPDATE CASCADE ON DELETE CASCADE --设置级联更新及级联删除
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)