数据库主从表主键外键常识[
指南
验证指南下载验证指南下载验证指南下载星度指南下载审查指南PDF
]
A表的主键在B表中充当外键,谁是主表,谁是子表,
A为主表
B为从表
个人认为:
外键是约束的一种。不存在主从关系,只存在引用关系,如部门表与员工表。 每个员工都属于某个部门,必须与某个部门资料对应。
主从表的情况:类似于订单表与订单明细表的关系。
希望以上有所帮助.
有两个表 A表中的C字段里面的内容是B表中的主键,并且值有多个,请问数据库该怎么设计啊? create table B
(
C char(6) primary key,
C_Name varchar(50) not null
)
go
create table A
(
A_ID char(6) primary key,
A_Name varchar(100) not null,
C char(6) references B(C) --将A表中C字段设置外键
)
go
从表的外键与主表的主键的列名必须相同吗,值呢,
列名不一定要相同,但是外键的取值要么从主键的域中取要么取空值,这在数据库中叫做参照完整性规则。
主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:
关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途:
1. 惟一地标识一行。
2. 作为一个可以被外键有效引用的对象。
基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:
1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
2. 主键应该是单列的,以便提高连接和筛选操作的效率。
注:使用复合键的人通常有两个理由为自己开脱,而这两个理由都是错误的。其一是主键应当具有实际意义,然而,让主键具有意义只不过是给人为地破坏数据库提 供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键,我也反对这种做法,理由是:复合主键常常导致不良的外键,即当连 接表成为另一个从表的主表,而依据上面的第二种方法成为这个表主键的一部分,然,这个表又有可能再成为其它从表的主表,其主键又有可能成了其它从表主键的 一部分,如此传递下去,越靠后的从表,其主键将会包含越多的列了。
3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。
4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中 所谓外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
至于主键:主关键字是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。
如上可知:若name是表B的主键,由于name还是表A的外键。由上面的定义可知表B是表A的主表,表A则是表B的从表,
外键是该表是另一个表之间联接的字段
外键必须为另一个表中的主键
外键的用途是确保数据的完整性。它通常包括以下几种: 实体完整性,确保每个实体是唯一的(通过主键来实施)
域完整性,确保属性值只从一套特定可选的集合里选择
关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值
例子:
表A 字典表, 表B 业务表。
外键应建立在表B 上 。
1、表B 的字典项目的代码只能是表A 中代码内容。
2、表B 可以无条件删除记录。
3、表A 在删除的时候,将根据外键的规则,判断表B 中是否使用了要删除数据的代码,如果有引用,则不能删除。
ORACLE 如何建立表外键
例:学生表student (id, name , sex )
成绩表score (id ,math )
: 如何创建表,要求 有主键,有约束 解
CREATE TABLE STUDENT(
ID CHAR(10),
NAME VARCHAR(8),
SEX CHAR(1));
ALTER TABLE STUDENT ADD CONSTRAINT PK_STUDENT PRIMARY KEY(ID);
CREATE TABLE SCORE( ID CHAR(10),MATH NUMBER(5,2));
ALTER TABLE SCORE ADD CONSTRAINT FK_SCROE FOREIGN KEY(ID) REFERENCES
STUDENT(ID);
* 主键与外键: 键是表中的列(可以是一列,也可以是几列),主键用于唯一的标识表中的数据项;外键用于连接父表和子表。而所谓的父表和子表是根据3NF范式的要求,为了消除传递依赖,将原表拆成2个相互关联的表,而这个关联就是外键。
1> -- 创建测试主表. ID 是主键.
2> CREATE TABLE test_main (
3> id INT,
4> value VARCHAR(10),
5> PRIMARY KEY(id)
6> );
7> go
-- 建表时设置外键
1> CREATE TABLE test_sub ( 2> id INT,
3> main_id INT,
4> value VARCHAR(10), 5> PRIMARY KEY(id), 6> FOREIGN KEY (main_id) REFERENCES test_main
7> );
8> go