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
7> );
8> go test_main