51Testing软件测试论坛

标题: 还没明白主键、外键的意思。 [打印本页]

作者: ppzhang    时间: 2005-12-5 17:40
标题: 还没明白主键、外键的意思。
两个问题
1,主键&外键的意思,这是看到的定义:
主键( Primary key )是能唯一标识行的一列或一组列的集合。
由多个列构成的主键称为连接键(Concatenated key)、组合键(Compound key ),或称作为复合键(Composity key )。
外部键(Foreign key )是一个表中的一列或一组列,它们在其它表中作为主键而存在。一个表中的外部键被认为是对另外一个表中主键的引用。实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者它所引用的主键当前存在值相一致。
我的理解:主键和外部键是不是可以看作是一个指针?是不是主键指向外部键所在的表(是否可以称作主键所在表的子表)?看书上说父表子表什么的,为什么不叫父键子键啊?
这样一个命令:
CREATE TABLE  test1 ('name'  CHAR(10) PRIMARY KEY,price NUMBER(5,2),amount NUMBER(10));
主键是 name,那price 和 amount是什么?
2,书上原话:
   为了是两个表之间存在关系,必须使两件事为真:
-父表必须有一列唯一标识它所包含的每个记录
-子表必须有一个相同的列包含唯一标识父记录的值
现在我上面的test1表中有商品 '内存’,子表里放的是内存的种类(128m,256m),其子表是否必须这样建立:
CREATE TABLE  test2 ('name'  CHAR(10),......);
然后我要看256m内存的价格就访问test1,test1通过主键name指向test2的name,然后返回256的价格啊?如果是这样的话就要外键没用了呀。
今天真的很晕.......:|
作者: talent467    时间: 2005-12-6 08:43
我也晕倒了,哈哈。test1是主表么?他的主键时name。那么用以联系test2并且是在test2中作为主键的那个字段应该就叫做外键吧。如果两个表的主键是一样的都是name,那么直接查test2不就得了?迷糊~~~~!!!!
作者: ilovejolly    时间: 2005-12-6 10:04
不要被概念迷惑,找一些简单的数据表结构的例子自然一目了然
作者: lovevike    时间: 2005-12-6 19:23
例如有两个表格:

        AAA表
字段有:A1             字段A1为AAA表的主健
        a2
        a3
        a4       

        BBB表
字段有:B1             字段B1为BBB表的主健
        A1
        b2
        b3
        b4


现在就用以上两个表来回答主键、外键的意思:

AAA.A1是AAA表的主健,BBB.A1是AAA表的外键。


以上回复是我对主键和外键的理解,如果有错就指正

[ 本帖最后由 lovevike 于 2005-12-6 19:26 编辑 ]
作者: talent467    时间: 2005-12-7 08:32
我认为应该是A1是BBB的外键吧。
作者: ppzhang    时间: 2005-12-7 10:02
应该是:针对表AAA说A1是主键,针对表BBB说A1是外键,所以说AAA.A1是主键,BBB.A1是外键,有点OOB的意思。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2