5.禁止存储大文件或者大照片 当人员照片较多时,分页查询速度明显变慢,之前1秒内响应,加了照片字段后,需要4~5秒左右才能响应。...大文件和照片存储在文件系统,数据库里存URI更好 6.表必须有主键,例如自增主键 a)主键递增,数据行写入可以提高插入性能,可以避免Page分裂,减少表碎片提升空间和内存的使用。...7.禁止使用外键,如果有外键完整性约束,需要应用程序控制 外键会导致表与表之间耦合,Update与Delete操作都会涉及相关联的表,十分影响SQL的性能,甚至会造成死锁。...>、NOT IN、NOT LIKE等,会导致全表扫描 b)%开头的模糊查询,会导致全表扫描 (4)禁止大表使用JOIN查询,禁止大表使用子查询 理由:会产生临时表,消耗较多内存与CPU,极大影响数据库性能...(5)禁止使用OR条件,必须改为IN查询 理由:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?
一、主键是什么? 主键是数据库表中的一个或多个字段(列),它的值用于唯一地标识表中的某一条记录。...作为外键参照的基础: 其他表可以通过外键(Foreign Key)来引用本表的主键,从而建立表与表之间的关联关系,保证数据的一致性和参照完整性。...代理主键:使用一个与业务无关的、无意义的字段作为主键(如:自增整数、UUID)。 优点:稳定,业务逻辑变化不影响主键。通常是简单的整数,性能极佳。...空间大:CHAR(36) 或 BINARY(16),比 INT(4字节)/BIGINT(8字节) 大得多。作为主键,每个二级索引的叶子节点都会存储主键值,这会显著增加索引大小。...缺点: 每个二级索引都会包含所有主键列,导致索引体积庞大。 在 InnoDB 中,其他表的外键引用此表时会变得复杂。 建议:除非有非常明确的理由(如上述中间表),否则尽量使用单一的代理主键。
Active Record 的约定 命名约定 Rails把模型的类名转换为复数,然后查找对应的数据表,Rails提供的单复数转换功能非常强大,类名应该使用驼峰命名: ?...Schema约定 外键: 使用 singularized_table_name_id 形式命名,例如 item_id,order_id。...主键: 默认情况下,使用证整数字段id作为表的主键。...中使用已有的数据库,则可以覆盖默认的命名约定,如修改表名和主键名: class Product < ApplicationRecord self.table_name = "my_products...迁移的代码储存在特定的文件中,可以通过rails命令执行。
问答录 先看花絮 Q:如果外键是NULL,它右什么作用吗?有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。...A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。 ---- Q:加强连接?是什么意思?...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 ---- Q:所以上面说的那种,我就不能删除了是吗?...A:还是可以的,先移除外键行即可。 ---- Q:遇到多对多关系的时候,一定要用中间件吗? A:不然呢?...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。
数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式?分别有什么区别?...数据库三大范式是什么 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。...第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。...并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。 MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。...Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。 最后 欢迎大家一起交流,喜欢文章记得关注我点个赞,感谢支持!
其中,“医疗”关系中的外键是 (A) A.患者编号 B.患者姓名 C.患者编号和患者姓名 D.医生编号 理由: 因为医疗关系中的主键是(患者编号,患者姓名),但是患者编号不是医疗的主键,是患者关系中的主键...,所以患者编号是医疗关系中的外键。...如下图示: 则关系 S中违反完整性规则的元组是(A) A. B. C. D. 理由: 参照完整性规则:指如果关系的外键R1和关系R2的主键相符...,那么外键的每个值必须在关系R2中主键的值中可以找到或者是空值。...而在关系S中的外键A的3值在关系R中找不到对应的,所以违反参照完整性规则。
有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。...不能单纯的使用另一张表的键,称之为外键,而不加上约束吗? A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。 加强连接?是什么意思?...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 所以上面说的那种,我就不能删除了是吗? A:还是可以的,先移除外键行即可。...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。 ?...有使用左外连接取代右外联接的理由吗? A:一般来说,固定使用一种联接的习惯会让事情更简单,这样不容易搞混。
让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议):下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。 然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。 这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...5.跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8.懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。
有哪些不同之处呢? 现在,我们只剩下一个问题 —— 那么,选择一个而不选另一个的原因是什么呢? 生态系统是其中一个因素。...由于外键引用和 JOIN 将触发主键查找,所以影响可能非常大,这将导致大量查询。...但是,如果按照现代表设计的约定,将一个自动增量整数作为主键[1]——它被称为代理键——那么拥有一个 聚集索引几乎总是可取的。...那么当你在一个列中有一个大型 JSON 对象时会发生什么呢? Postgres 使用 TOAST,这是一个专用的影子表(shadow table)存储。当行和列被选中时,大型对象就会被拉出。...您不必为接受我说的——实际上在官方wiki上已经有对它的讨论,这表明现在是时候从InnoDB身上学回来一些好的想法了。
让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...5.跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8.懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。
让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。 4....ORM(对象关系映射)框架或Ruby on Rails框架就是这种情况。这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。...跨数据库关系 这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。...也许这个原因和以前一样,或者是下一个原因: 8. 懒惰的架构师 在创建数据库时,如果要存储数据,则需要创建一些表和列。这是最低限度。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。
那就是学号,如果是名字的话,是有可能重复的,那么主键的含义就是表示表中的该数据是独一无二的,不能有重复的,不能为空等。 而对于主键来说,一般都是整数类型。...那么为什么需要主键,我们现在没有外键的概念,我们纯拿班级举例,一个老师进班级,谁都不认识,只能通过学号点名,你说,两人的学号一样的话,点一个学号,站起来两人给老师回答问题,这不乱了吗?...所以主键的非空和唯一性我们都验证了,进入下一个了吗? 那肯定不会,如果只验证这两个特点,那这主键就太low了,你说,我们标识唯一性,难道只能用一个字段来标识吗?...那么我们有了主键之后,我们应该如何删除主键呢?或者我们忘记添加主键了,我们应该如何添加呢?...对于唯一键来说,也是可以删除和添加的,和主键也差不多,也是存在复合唯一键的,所以除了使用的点不同,键的特性还是差不了太多的: 接下来就是自增长了,这个非常简单,可以理解为自动++: create table
现在MySQL 8和PostgreSQL 10已经发布,现在是重新审视两个主要的开源关系数据库如何相互竞争的好时机。...也就是说,如果您在30台服务器上运行Rails应用程序,其中每台服务器具有16个CPU内核和32个Unicorn worker,则您有960个连接。...使用聚合索引时,当您通过主键查找记录时,单个I / O将检索整行,而非聚集索引始终通过遵循引用至少需要两个I / O。由于外键引用和联接将触发主键查找,因此影响可能很大,这将占查询的绝大多数。...但是,考虑到现代惯例,将自动递增的整数作为主键[1](称为代理键),几乎总是希望拥有聚合索引。...MySQL上的压缩不仅适用于页面外的大对象,而且适用于所有页面。它是通过在稀疏文件中使用打孔来实现的,稀疏文件受ext4或btrfs等现代文件系统支持。
点此一键订阅【每日精选时刻】专栏,吃瓜新鲜作品不迷路!...拿到这款"TCP 不丢包"之后我苦思冥想:我对 TCP 的掌握足够了吗?我对 TCP 的相关概念都清晰了吗?我拥有解决 TCP 丢包的办法了吗?...今年的你,是否比去年更“牛”了呢?在这个特别的日子里,腾讯云开发者社区特别准备了限定话题——程序员最想收到的祝福是什么?1024程序员节有奖征文|多写牛「码」,不做牛马!...在二进制构筑的计算机世界里,1024是技术人最熟悉的“整数”。今年腾讯云开发者社区陪伴各位小伙伴度过第7个1024程序员节!...快来和百万开发者分享你在一息万变的时代下磨砺成长的经验,记录那些惊喜的、顿悟的、困扰的、闪闪发光的时刻,享受Switch、键鼠与海量鹅厂程序员周边好礼
那怎么办呢?...,像这样的字段,就符合外键的特点,就可以使用外键约束,使该字段只能够存储另一张表的主键。 ...2)外检的特点 2.1)、外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。 ...2.3)、子表被外键约束修饰的字段必须和父表的主键字段的类型一样。 注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。...tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id 4.3、非空约束 NOT NULL:被该约束修饰了的字段,就不能为空,主键约束中就包括了这个约束
因为主键的第二个作用是让其他表的外键引用自己,从而实现关系结构。一旦某个表的主键发生了变化,就会导致所有引用了该表的数据必须全部修改外键。...很多Web应用的数据库并不是强约束(仅仅引用主键但并没有设置外键约束),修改主键会导致数据完整性直接被破坏。 业务字段不可用于主键 所有涉及到业务的字段,无论它看上去是否唯一,都决不能用作主键。...那么,主键应该使用哪个字段呢? 主键必须使用单独的,完全没有业务含义的字段,也就是主键本身除了唯一标识和不可修改这两个责任外,主键没有任何业务含义。...我们先看使用整数的问题。 使用整数有两个选择:数据库自增和自己生成。 自己生成其实也是自增,无非就是把上次使用的值保存到某个地方,下次使用的时候继续自增。...为啥64位整数除掉时间戳只能用后面的fffff位呢?
把这些都记录下来,并且加上说明和关联,我觉得是很有必要的。...主键;3:外键 ColSysName 字段名称 nvarchar 50 _ 数据库里的名称 ColName 对外名称 nvarchar 50 _ 显示给用户看的名称 ColType 字段类型 nvarchar...在表单里对应的控件 CheckKindID 验证类型 int 4 1 外键。...0 如果该字段是外键,则记录外键对应的表的名称 ForeignColumnID 对应外键字段名 int 4 0 如果该字段是外键,则记录在外键表里对应的字段的名称 这个表里要记录一个项目里所有的字段的信息...60万、100万级别的数据,都不会有什么慢的感觉,小一点的项目才几十个表、一千不到的字段,怕什么呢?即使大一点的项目,几百个表、上万个字段,也只不过是“万”级别的数据,也没有什么可担心的。
关于唯一键和主键的区别: 我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。...也就是说唯一键和主键不冲突,并且还是互相补充的,最大的价值就是一个表中可能有很多不能冲突的字段,但是主键只能有一个,唯一键可以有很多个。...当然,唯一键也可以在建表之后设置: 外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。...当定义外键后,要求外键列数据必须在主表的主键列存在或为null。...having和where的区别是什么呢?
1.3.3 主键的设计 ➢ 主键是必要的,SQL SERVER 的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键, 所以主键往往适合作为表的聚集索引。...➢ 在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键 的 B 树结构的层次更少。...➢ 主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般 应该选择重复率低、单独或者组合查询可能性大的字段放在前面。...1.3.4 外键的设计 ➢ 外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是: ➢ 外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK...我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点 太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙 的被修改或者丢失。