美文网首页
基本概念

基本概念

作者: iamxcc | 来源:发表于2017-02-06 00:01 被阅读16次

    主键

    表中每一行都应该有可以唯一标识自己的一列(或一组列)。
    主键(primary key)一一列(或一组列),其值能够唯一区分表中每个行。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

    应该总是定义主键虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据操纵和管理。

    主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。

    主键的最好习惯
    除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为:

    1. 不更新主键列中的值;
    2. 不重用主键列的值;
    3. 不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)

    外键

    一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

    假如有一个包含产品目录的数据库表,其中每种类别的物品占一行。对于每种物品要存储的信息包括产品描述和价格,以及生产该产品的供应商信息。

    现在,假如有由同一供应商生产的多种物品,那么在何处存储供应商信息(如,供应商名、地址、联系方法等)呢?将这些数据与产品信息分开存储的理由如下。

    1. 因为同一供应商生产的每个产品的供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间。
    2. 如果供应商信息改变(例如,供应商搬家或电话号码变动),只需改动一次即可。
    3. 如果有重复数据(即每种产品都存储供应商信息),很难保证每次输入该数据的方式都相同。不一致的数据在报表中很难利用。

    在这个例子中,可建立两个表,一个存储供应商信息,另一个存储产品信息。 vendors 表包含所有供应商信息,每个供应商占一行,每个供应商具有唯一的标识。此标识称为主键(primary key)(在第1章中首次提到),可以是供应商ID或任何其他唯一值。

    products 表只存储产品信息,它除了存储供应商ID( vendors 表的主键)外不存储其他供应商信息。 vendors 表的主键又叫作 products 的外键,它将 vendors 表与 products 表关联,利用供应商ID能从 vendors 表中找出相应供应商的详细信息。

    外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

    相关文章

      网友评论

          本文标题:基本概念

          本文链接:https://www.haomeiwen.com/subject/jbtyittx.html