精华内容
下载资源
问答
  • 2019-07-22 18:10:50

    阿里Java规范

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

    说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

    外键

    外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值,用于保持数据的一致性。

    • 保证数据的完整性和一致性
    • 级联操作方便
    • 将数据完整性判断托付给了数据库完成,减少了程序的代码量。

    • 性能下降: 每次对数据进行DELETE或UPDATE操作都必须考虑外键约束 数据库都会判断当前操作是否违反数据完整性,性能下降。
    • 死锁:使用外键,外键关联的数据查询要去另一张表,获取额外的锁,容易造成死锁。
    • 扩展性问题:触发器 外键 这种依赖于数据库本身的特性 可扩展性较差。 分库分表方便,在水平拆分和分库的情况下,外键是无法生效的。

    参考

    https://www.cnblogs.com/rjzheng/p/9907304.html
    https://blog.csdn.net/u010695055/article/details/53169472
    https://blog.csdn.net/u010094934/article/details/90137110

    更多相关内容
  • mysql外键概念

    2021-07-16 19:10:30
    CREATE TABLE parent (id INT NOT NULL,PRIMARY KEY (id)) ENGINE=INNODB;CREATE TABLE child (id INT, parent_id INT,INDEX par_ind (parent_id),FOREIGN KEY (parent_id) REFERENCES parent(id)ON DELETE CASCADE)...

    CREATE TABLE parent (id INT NOT NULL,

    PRIMARY KEY (id)

    ) ENGINE=INNODB;

    CREATE TABLE child (id INT, parent_id INT,

    INDEX par_ind (parent_id),

    FOREIGN KEY (parent_id) REFERENCES parent(id)

    ON DELETE CASCADE

    ) ENGINE=INNODB;

    I dont understand the meaning of putting ENGINE = INNODB here, and why do we use ON DELETE CASCADE?

    解决方案

    engine=innodb will ensure you get foreign key support. The default MyISAM engine doesn't support foreign keys. On delete cascade will remove the child row if the referenced row in the parent table is removed.

    展开全文
  • 数据库中主外键概念详细介绍

    千次阅读 多人点赞 2020-05-17 18:18:33
    一、主外键概念 主键 ​ 1、主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性成为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作,同时也主要用于和其他...

    关于数据库的主外键设置问题

    一、主外键概念

    主键

    1、主键

    ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性称为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来操作,同时也主要用于和其他表之间通过主外键关联建立表之间的联系。例如:

    ​ 下图这个员工表中对应第一行红色字段为表的主键,它标识出了数据的唯一性

    在这里插入图片描述

    2、主键作用

    ​ 保证数据库表的唯一性、完整性

    ​ 用于和其他表之间建立外键关联的关系,从而实现对关联表的控制操作

    3、主键设计原则

    ​ 主键的设计对用户无意义(由下边举例阐述)

    ​ 以“居民身份证” 作为作为主键的设置,在升号时带来的麻烦作为反例。但实际上身份证作为主键设计是没有问题的。用身份证作为主键,对其他数 据的引用带来了好处,数据完整性得到保证。升号属于几十年才可能有的事情(也许接下来几十年都不会再升号),这属于极少变化的属性。虽然升级时带来了麻 烦,可是否不用身份证作为主键的升级就不麻烦了吗?其实无论选择什么属性作为主键,升级的工作量都是相当的。

    ​ 主键设置应该是单列的,为了提高查询和连接的效率

    ​ 主键永远不要去更新它

    ​ 主键不应该包括动态变化的数据,例,时间戳、时间列等

    ​ 主键通常要设置自增长,由计算机自动来生成

    4、主键选取策略

    ​ 通常数据库建表时一个表至多能设置一个主键,以下为常用三种主键选取方式:

    1. ​ 自动增长型字段

    2. ​ 手动增长型字段

    3. ​ UniqueIdentifier

      ​ 使用UniqueIdentifier SQL Server提供一个UniqueIdentifier数据类型(16字节),并提供一个生成函数NEWID(),生成一个唯一的UniqueIdentifier

    4. ​ COMB类型

      保留UniqueIdentifier的前10字节,后6字节表示生成时间

    外键

    1、外键

    ​ 外键就是通过表中一个键将两个表连接起来的键

    在这里插入图片描述

    2、外键作用

    ​ 保证数据的完整性和一致性

    ​ 主要目的是控制存储在外键表中的数据。

    ​ 支持关联查询。

    ​ FOREIGN KEY约束用于防止会破坏表之间链接的操作

    3、阻止执行

    ​ 从表插入一条数据时,若外键值不是主表的主键值时,将阻止插入数据

    在这里插入图片描述

    mysql> INSERT INTO banji VALUES('11','英语一班','8');		-- 错误写法
    ERROR 1062 (23000): Duplicate entry '16' for key 'PRIMARY'
    
    mysql> INSERT INTO banji VALUES('11','英语一班','9');		-- 正确写法
    Query OK, 1 row affected (0.00 sec)
    

    ​ 从表修改外键值时,其值不是主表的主键值则阻止修改(可参照上图理解)

    ​ 主表删除某一行时,其主键值在从表里存在则将阻止删除(若想删除,必须要现删除从表的关联行)

    ​ 主表修改主键值时,旧值在从表里存在,则将阻止修改(若想修改,必须要现删除从表的关联)。

    4、级联执行

    ​ 主表删除、修改某一行数据,则从表数据将被一起删除、修改

    总结

    ​ 结合实际情况来看,数据库设计时尽量不要设计太多外键关系;因为在后期的数据库维护起来比较麻烦,出现各种关联关系的表,耦合度比较高,因而个人不建议,设置太多外键关联。(可通过子代码编写方法,实现数据之间的逻辑业务处理)

    展开全文
  • 问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑 描述: 原文如下: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生...

    原文地址:http://www.codes51.com/itwd/4517194.html

    问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑
    描述:
    原文如下:

    【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
    说明:以学生和成绩的关系为例,学生表中的 student id 是主键,那么成绩表中的 student id
    则为外键。如果更新学生表中的 student id ,同时触发成绩表中的 student id 更新,即为
    级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群 ; 级联更新是强阻
    塞,存在数据库更新风暴的风险 ; 外键影响数据库的插入速度。

    请问各位数据库是每个表都增加一个业务的编码字段做关联还是直接通过id关联呢?
    我的看法是:如果是小项目单库的话用id关联更方便,自动有主键索引,如果是分布式数据库项目每个表都建一个业务编码字段,通过业务编码字段关联,但是这样需要手动建索引提高查询效率.因为没有大项目的数据库经验,所以想问一下大中型的项目数据库业务关联是直接通过id关联还是增加一个业务编码字段关联呢?

    解决方案1:
    试试通过id关联,只是不在数据库上去约束

    解决方案2:
    就是不让用外键呗。 这个应该大多互联网项目 都不用外键了吧。我09年开始做互联网的项目,就没用过外键了。 至于为什么,楼上回答的好啊, 业务变动,修改数据库的成本很高。最重要的原因 文中说的也很清楚,分布式、高并发集群环境下,容易产生更新风暴。外键影响数据库的插入速度
    不用外键后, 各个数据表的关系维护,通过应用程序来解决。

    解决方案3:
    数据库表的关联,应该按照表的内部id做关联,不推荐用业务编码做主键。
    业务规则的变化是不可预测的,如果因为业务规则的变化导致数据库结构大的变动,甚至还要做数据更新,我认为是失败的设计方案。

    以上介绍了“ 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑”的问题解答,希望对有需要的网友有所帮助。

    展开全文
  • 大数据工具之HIVE外键及多表关联的介绍.zip
  • 外键 主键 概念

    千次阅读 2020-11-04 09:09:17
    关于数据库主键和外键(终于弄懂啦) 关系型数据库中的一条记录中有若干个属性, 若其中某一个属性组(注意是组)能唯一标识一条记录, 该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生...
  • 设置外键的时候遇到1005错误。1005 - Can’t create table ‘oschina.#sql-97c_2’ (errno: 150) 然后查了很久才发现两个字段的大小不匹配。名字都叫做sid,一个是UNSIGNED INT(10),另一个是INT(11)。两个字段的类型...
  • 外键概念

    2006-12-05 19:49:29
    weather 和 cities 表。考虑一下下面的问题:你想确保没有人可以在 weather 表里插入一条在 cities 表里没有匹配记录的数据行。 这就叫维护你的表的参考完整性。 在简单的数据库系统里,实现(如果也叫实现)这个...
  • 3.2 创建外键 通过[constraint 外键ID名] foreign key(外键名) references 外键表(外键名),比如: create table a( id int(11), userid int(11), [constraint fk_userid] foreign key(userid) references user(id)...
  • 对于下面这个问题,如果要在应用层解决,如何解决? 问题:以学生和成绩的关系为例,学生表中的 student _ id 是...则为外键。如果更新学生表中的 student _ id ,同时触发成绩表中的 student _ id 更新,即为 级联更新
  • 开发规范中为什么要禁用外键约束

    千次阅读 多人点赞 2022-03-11 13:39:11
    不得使用外键与级联,一切外键概念必须在应用层解决。 外键的优缺点 缺点:每次做DELETE或者UPDATE都必须考虑外键约束,会导致开发时很痛苦,测试数据极为不方便。 优点:保证数据的完整性和一致性,级联操作方便,...
  • **【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 ** 但是呢,询问他们原因,大多是这么回答的 每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。 坦白...
  • 强制 不得使用外键和级联 一切外键概念必须在应用层解决 外键的好处 外键保证了数据的完整性和一致性,并且使得级联操作方便,将数据库的完整性判断托付给了数据库完成,减少了程序的代码量。 外键的坏处 性能...
  • 一、概念:1、主键(primary key)能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空...
  • 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key 目录MySQL约束(主键,唯一,非空,外键...
  • CSDN首页 博客 课程 文库·商城 问答 社区 插件 认证 开源 mysql为何不建议使用外键 ...mysql为何不建议使用外键_为什么很多mysql课程不...用外键的好处我就不多说了,既然是关系型数据库,外键的约束为我们保证了数据主
  • 第六条: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明: ( 概念解释 ) 学生表中的 student _ id 是主键,那么成绩表中的 student _ id 则为外键。如果更新学生表中的 student _ id ,同时...
  • 问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑 描述: 原文如下: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生...
  • 1. 关系数据库外键概念理论(大学时学习的概念) 教材是:王珊,萨师煊老师的数据库系统概论——第五版,这里直接丢截图了。 有三类完整性约束,分别是:实体完整性、参照完整性以及用户定义的完整性。 其中实体...
  • 主要介绍了mysql外键基本功能与用法,结合实例形式详细分析了mysql外键的基本概念、功能、用法及操作注意事项,需要的朋友可以参考下
  • 因此上述关系模式中,姓名,和年龄也能唯一确定学生,那么主键有: 例:(Sno), (Sname),复合主键(Sname,Sage) 外键 定义:可以把一张表的数据与另一张表关联起来,这种列称为外键(Foreign Key)。 分析:...
  • mysql 外键约束

    2022-02-25 18:47:01
    概念外键约束是让两个表数据之间建立连接保证数据的一致性和完整性 语法: – 添加约束 创建表时添加约束 create Table 表名{ 列名 数据类型, …… [constraint] [外键名称] FOREIGN KEY(外键列名) ...
  • http://blog.csdn.net/bingqingsuimeng/article/details/51595560
  • constraint 约束数据(对表中数据的限制条件)四种条件约束:非空 唯一性 主键约束 外键约束非空约束(not null)约束的字段不能为空值,必须赋具体的数据CREATE TABLE t_user (id INT (4),NAME VARCHAR(32) NOT NULL,...
  • sql server 外键 In this article, we will seek an answer to an important question – “What is a foreign key in SQL Server?”. At the same time, we will give some seconder answers to this question. ...
  • 什么是主键、外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。比如:学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,032
精华内容 22,412
关键字:

外键的概念