精华内容
下载资源
问答
  • 一个表只能有一个主键
    千次阅读
    2021-02-01 22:39:35

    主键是非常不幸的符号,因为“初级”的内涵和与逻辑模型有关的潜意识联想。 因此我避免使用它。 相反,我指的是物理模型的代理键和逻辑模型的自然键。

    重要的是,每个实体的逻辑模型至少具有一组“业务属性”,其包括实体的密钥。 Boyce,Codd,Date等在关系模型中将这些称为候选键。 然后,当我们为这些实体构建表时,它们的候选键在这些表中成为自然键。 只有通过那些自然键,用户才能唯一地识别表中的行; 因为代理键应始终对用户隐藏。 这是因为代理键没有商业意义。

    然而,在没有代理键的情况下,我们的表的物理模型在许多情况下效率低下。 回想一下,非聚集索引的非覆盖列只能通过密钥查找(通常)找到聚簇索引(忽略作为堆积实现的表)。 当我们的可用自然密钥很宽时,这(1)扩大了我们的非聚簇叶节点的宽度,增加了存储要求,并且对非聚集索引的搜索和扫描进行了读取访问; (2)减少聚集索引的扇出,增加索引高度和索引大小,再次增加聚簇索引的读取和存储要求; (3)增加了我们的聚簇索引的缓存要求。 从缓存中追逐其他索引和数据。

    这是一个小的代理键,被指定为RDBMS作为“主键”证明是有益的。 当设置为聚类键时,为了用于从非聚集索引和相关表中的外键查找中查找聚簇索引的键,所有这些缺点都消失了。 我们的聚簇索引扇出再次增加以减少聚簇索引的高度和大小,减少聚簇索引的缓存负载,减少通过任何机制访问数据时的读取(无论是索引扫描,索引搜索,非聚簇键查找还是外键查找) 并降低表的聚簇索引和非聚簇索引的存储要求。

    请注意,仅当代理键很小且聚类键时才会发生这些好处。 如果GUID用作聚类键,则情况通常比使用最小可用自然键时更糟。 如果表被组织为堆,则8字节(堆)RowID将用于键查找,这比16字节GU

    更多相关内容
  • 为什么数据库只有一个主键

    千次阅读 2021-02-03 09:41:01
    一个(关系)"超级键"是每组在中具有唯一子行的列集。 (请注意,超级密钥的每个超集也是一个超级密钥。)(简单的SQL KEY声明了什么,以及那些超集。)不包含较小超级密钥的超级密钥是"候选密钥&...

    一个(关系)表"超级键"是每组在表中具有唯一子行的列集。 (请注意,超级密钥的每个超集也是一个超级密钥。)(简单的SQL KEY声明了什么,以及那些超集。)不包含较小超级密钥的超级密钥是"候选密钥"。规范化和其他关系理论关注候选键并且不关心主键。就查询,更新和约束的含义而言,没有必要或基础来选择一个候选密钥并将其称为“#34; primary" (和其他人#34;替代")。它只是从关系模型早期的关系前系统延续下来的传统,当时它并没有被理解为是不必要的。

    索引的目的也是不必要的(必须具有性能,另一个重要的可观察表达式)。

    然后,因为有一个传统的主键,其他东西(如自动索引)附加到他们身上。但是这些东西并不需要附加到主键上,主键不是那些其他东西所必需的。

    SQL只允许你声明一个PRIMARY KEY,因为只有"假设"成为一个主键,但这并不意味着有充分的理由在附加功能之外声明任何内容。无论如何,SQL PRIMARY KEY实际上意味着UNIQUE NOT NULL,即超级密钥,而不是候选密钥,所以只有在UNIQUE NOT NULL的适当子集上没有声明PRIMARY KEY时才这样做列是它声明一个主键。因此,SQL PRIMARY KEY不一定是主键的事实表明声称对主键的需求是多么空。 (并且SQL FOREIGN KEY不是外键,因为它们不会引用任何但只有候选键(应该如此),甚至只引用任何但只有主键,或者甚至只引用{ {1}} s,它们只引用任何超级密钥。所以再次说明主键必要性的说法是空的。)

    大多数SQL DBMS会自动且特别地索引PRIMARY KEY。但这只是向用户揭示某些实施方式的某种方式。

    有时声称,使用单一方式引用核心业务实体可以证明拥有基表主键。但是,任何表表达式的任何超级键,即任何一个候选键的任何超集,都标识任何包含的超级键所做的一切(包括主键)。因此,即使实体的主键列不存在,查询仍然可以具有标识它的列。此外,任何表表达式的任何超级键都标识某个实体,无论它是否在某个基表中被标识(更不用说通过主键)。此外,即使通过查询对列进行了预测/ PRIMARY KEY,其行的含义仍然是根据保存这些列的表的含义。因此,查询,更新或约束可以再次涉及核心业务实体,而不存在其指定的主键列。并且它可以涉及没有关联的基本主键列的派生实体。因此声称主键是必需的或基本的或唯一识别是没有根据的。

    展开全文
  • CREATE TABLE orderitems ( order_num int(11) NOT NULL, order_item int(11) NOT NULL, prod_id char(10) NOT NULL, quantity int(11) NOT NULL, item_price decimal(8,2) NOT NULL, PRIMARY KEY (order_num,orde.....

    在这里插入图片描述

    在这里插入图片描述

    CREATE TABLE orderitems (
    order_num int(11) NOT NULL,
    order_item int(11) NOT NULL,
    prod_id char(10) NOT NULL,
    quantity int(11) NOT NULL,
    item_price decimal(8,2) NOT NULL,
    PRIMARY KEY (order_num,order_item),
    KEY FK_OrderItems_Products (prod_id),
    CONSTRAINT FK_OrderItems_Orders FOREIGN KEY (order_num) REFERENCES orders (order_num),
    CONSTRAINT FK_OrderItems_Products FOREIGN KEY (prod_id) REFERENCES products (prod_id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    在这里插入图片描述

    展开全文
  • Oracle报错:表只能有一个主键。总结及解决方案。

    报错现场

    在这里插入图片描述
    当我给某个表格添加了两条主键时,发生了如下报错。
    在这里插入图片描述
    不会吧不会吧,不会Oracle不支持多条主键吧?那也太违背理论了,显然不太可能。于是我果断百度了一波,并进行了如下总结。

    原因、总结及解决方案

    Oracle中只能设置一个主键,确实是只能设置一个主键,但他的一个主键中可以有多个列。
    在这里插入图片描述
    这不同于mysql、SqlServer,他们都是支持直接添加多条主键的,而Oracle则是只能添加一条主键,但这一条主键中可以用多个列。其实用起来都是一样的,并没有什么本质上的区别。

    所以,只需要将多列放在同一条主键上即可。

    展开全文
  • 数据库的单个数据只能有一个主键。数据库主键,指的是一个列或多列的组合,其值能唯一地标识中的每一行,通过它可强制的实体完整性;主键主要是用与其他的外键关联,以及本记录的修改与删除。数据库的单个...
  • 一张可以多少个主键

    千次阅读 2021-01-19 05:33:29
    转自:http://blog.csdn.net/for12/article/details/49300843今天在共工作...1、数据库的每张表只能有一个主键,不可能多个主键。2、所谓的一张多个主键,我们称之为联合主键。注:联合主键:就是用多个字段一起...
  • 所谓主键就是能够唯一标识中某一行的属性或属性组,一个表只能有一个主键,但可以多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述...
  • 关于数据库一张表有个主键

    千次阅读 2021-09-15 22:20:55
    关系型数据库中,用户在建表时,只能有一个主键,不可能多个主键的,但时候我们碰到关系S和我们的关系C存在多对多的联系,在关系数据库中,多对多联系必须建立一个关系模式,而该模式的码是联系两端实体的码加上...
  • 背景介绍对sqlserver做数据库同步的时候,由于医院服务器和数据库版本的限制,选择了用发布订阅处理数据库同步,但是这方式只能处理有主键,对于无主键
  • 展开全部主键只有一个,但是可以设置...数据库的每张表只能有一个主键,不可能多个主键。所谓的一张多个主键,我们称之为联合主键。联合主键就是用多个字段一起作为一张主键主键主键的作用是保证数据的...
  • 外键必须是另一个表主键吗 ?

    千次阅读 2021-05-07 14:13:38
    比如学生在设计的时候一般可以用学号作为主键,也可设计一个ID字段,字段由数据库自动生成且唯一。那么对于班级,一个班级对应多个学生,这个时候对于班级和学生之间的外键就可以用学生的ID做外键。 如下所...
  • 1、数据库的每张表只能有一个主键,不可能多个主键。 2、所谓的一张多个主键,我们称之为联合主键。 注:联合主键:就是用多个字段一起作为一张主键。 3、主键主键的作用是保证数据的唯一性和完整性,...
  • 数据库主键

    千次阅读 2021-12-09 15:30:09
    数据库中的多个主键称为联合...sql 中一个表设置两个主键是 将两个字段联合起来设置为主键 一个表只能有一个主键 1.只有id为主键时 2.id和name这2个列一起构成为联合主键时 甚至可以全部字段设置为主键 ...
  • 外键必须是另一个表主键

    千次阅读 2019-03-01 14:48:49
    不一定是主键,但必须是唯一性索引。 主键约束和唯一性约束都是唯一性索引。 FOREIGN KEY 约束 ...在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两之间创建了链接。这...
  • 如何给一个数据库添加主键

    万次阅读 2020-12-03 09:46:06
    (一张表有只能有一个主键主键具有唯一性。) CREATE TABLE tb ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(20) ) 2.在创建的时候在所有字段后面使用primary key(主键字段列表)来创建主键(如果多...
  • SQL中的每一张都必须设有主键

    千次阅读 2021-01-28 06:59:10
    如果用户看到了一个表示多对多关系的连接中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。2)永远也不要更新主键。实际上,因为主键除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去...
  • 我们在建立数据库的时候,需要为每张指定一个主键,所谓主键是能够标识中某一行的属性或属性组,一个表只能有一个主键,但可以多个候选索引。因为主键可以标识某一行记录,所以可以确保执行数据更新、删除的...
  • MySQL为什么需要一个主键

    千次阅读 2021-01-28 17:40:58
    主键表中每一行都应该可以唯一标识自己的一列(或一组列)。一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号。主键(primary key) 一列(或一组列),其值能够唯一区分中的...
  • 数据库主键、唯一约束和索引

    千次阅读 2021-11-23 17:31:46
    (1)一个表可以没有主键,而且最多只能有一个主键。 (2)主键值必须唯一标识中的每一行,且不能为 NULL,即同一个表中不可能存在两行数据相同的主键值。 2、MySQL 的 唯一约束。  MySQL唯一约束...
  • 在我们开发的过程中,总感觉一张一个主键。但是事情往往没有我们想象的那么简单,一张其实也是可以多个主键。 如上图所示,其实说多个主键也不对,可以说是复合主键。意思为 这2个字段都不是唯一的,2个...
  • ·同一张表只能有一个主键,但能多个唯一约束; ·主键字段值不能为NULL,唯一约束字段值可以为NULL; ·主键字段可以做为其他的外键,唯一约束字段不可以做为其他的外键; ·SQLServer默认为主键字段创建聚集...
  • 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 主键和唯一索引的区别 二、区别 主键是一种约束,目的是对这个的某一列进行限制; ...
  • PRIMARY KEY联合主键

    2020-12-14 09:32:40
    ①每个表只能定义一个主键 ②唯一性原则 即主键值必须唯一标识中的每一行,且不能为 NULL,即中不可能存在相同主键值的两行数据 ③一个字段名只能在联合主键字段中出现一次 ④联合主键的最小化原则 即联合...
  • 设置MySQL数据表主键

    千次阅读 2021-01-28 00:39:07
    设置MySQL数据表主键:使用“primary key”关键字创建主键数据列。被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示:Mysql>createtablebooks(bookidint(11)...
  • 一、确立主键规范每个了解数据库设计的人都知道,主键对于一张来说是一个很重要,甚至必需的部分。这确实是事实,主键是好的数据库设计的一部分。主键是数据库确保数据行在整张唯一性的保障。它是定位到一条记录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,902
精华内容 89,960
关键字:

一个表只能有一个主键