外键

数据库的三大范式以及五大约束

匿名 (未验证) 提交于 2019-12-02 23:51:01
数据库的三大特性可谓是:实体属性和关系。 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性; 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情; 第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键); 【如何更好的区分三大范式】 【数据库五大约束】 1.primary KEY:设置主键约束; 2.UNIQUE:设置唯一性约束,不能有重复值; 3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2 4.NOT NULL:设置非空约束,该字段不能为空; 5.FOREIGN key :设置外键约束。 【主键】 1.主键的注意事项? 主键默认非空,默认唯一性约束,只有主键才能设置自动增长,自动增长一定是主键,主键不一定自动增长; 2.设置主键的方式? 在定义列时设置:ID INT PRIMARY KEY 在列定义完之后设置:primary KEY(id) 【外键】 2设置外键的语法: 参照操作可选值:

Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

匿名 (未验证) 提交于 2019-12-02 23:43:01
from django.db import models from idcs.models import Idc # Create your models here. class Cabinet(models.Model): #Froeinnkey所在的模型是多,所指向的模型就是一,idc就是一 idc = models.ForeignKey(Idc, verbose_name="所在机房") name = models.CharField(max_length=255) def __str__(self): return self.name class Meta: db_table = "resources_cabinet" ordering = ["id"]   在执行makemigrations 时报错 解决办法: 将第十一行的代码改为: herobook=models.ForeignKey('BookInfo',on_delete=models.CASCADE,)即在外键值的后面加上 on_delete=models.CASCADE 原因: 在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错: TypeError: __init__() missing 1 required positional

ERROR 1005 (HY000): Can't create table 'mydb.#sql-f58_12' (errno: 150)

匿名 (未验证) 提交于 2019-12-02 23:41:02
数据库表中外键加不上? 以前给表中字段加外键,都是加的另一个表的主键,这次同学问我,给一个author表中的name加外键(user表中的username),username不是主键。 alter table author add foreign key(name) references user(username) 然后就是加不上。。。 原因1 user表中的username,要成为author中name的外键,username(不是主键)此字段必须加上索引 alter table user add index(username) 原因2 username和name者两个字段的类型必须一致。 原因3 show create table author show create table user 看一下者两个表的类型是否一致 原因4 你的数据库引擎类型是MyISAM 外键 MyISAM:不支持 InnoDB:支持 谢谢! 文章来源: https://blog.csdn.net/qq_43371004/article/details/91491804

day35

五迷三道 提交于 2019-12-02 23:37:33
null的使用 -- is null -- is not null 单表操作 分组 -- 分组指的是:将所有记录按照某个相同字段进行归类 -- select 聚合函数, 选取的字段 from employee group by 分组的字段; 聚合函数 最大值 -- max(字段) 最小值 -- min(字段) 求和 -- sum(字段) 计数 -- count(字段) 平均数 -- avg(字段) having -- 表示对group by 之后的数据, 进行再一次的二次筛选 order by 排序 -- order by desc 降序 -- order by asc 升序,默认 limit -- 分页 -- limit offset,size -- offset: 行数据索引 -- size: 取多少条数据 顺序 /* select * from 表名 where 条件 group by 条件 having 条件 order by 条件 limit 条件; */ 多表操作 外键 减少占用的空间 只需要修改department表中一次, 其余的表中的数据就会相应的修改 一对多 -- constraint 外键名 foreign key (被约束的字段) references 约束的表(约束的字段) 多对多 两表间存在多对多的关系时,需要新建一张表来存储这种多对多的关系

Django 之 外键关联正向查找与反向查找

匿名 (未验证) 提交于 2019-12-02 23:32:01
正向查找与反向查找原理 两表之间的数据(Book与Publisher) 正向查找(查询第一本书的所在出版社是什么) import os if __name__ == '__main__': #加载Django项目的配置信息 os.environ.setdefault("DJANGO_SETTINGS_MODULE","testinclude.settings") #导入Django,并启动Django项目 import django django.setup() from ormtest import models #正向查询(查找书的类型对象,然后通过外键关联,在出版社列中查出那家出版社) book_obj = models.Book.objects.first() book_obj_publisher = book_obj.publisher.name print("书名:",book_obj,"出版社为:",book_obj_publisher) 反向查询(查询第一个版社下的所有书籍) #反向查询 publisher_obj = models.Publisher.objects.first() print(publisher_obj) publisher_obj_book = publisher_obj.books.all() #books为book类中定义的related

关于数据库主键和外键(终于弄懂啦)

匿名 (未验证) 提交于 2019-12-02 23:05:13
概念: 主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。 外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。 索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。 总结: 主键一定是唯一性索引,唯一性索引并不一定就是主键。 一个表中可以有多个唯一性索引,但只能有一个主键。 主键列不允许空值,而唯一性索引列允许空值。 主键可以被其他字段作外键引用,而索引不能作为外键引用。 一、什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号

Laravel 5.5 迁移报错:General error: 1215 Cannot add foreign key constraint

匿名 (未验证) 提交于 2019-12-02 22:11:45
问题 之前一直用的 Laravel 5.4,数据库也是直接写 sql 的,感觉可定制性更强,顺便锻炼下 sql。这次改用了 Laravel 5.5,索性用迁移建库试试,结果报错如下: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint `users_production_enterprise_id_foreign` foreign key (`production_enterprise_id`) references `production_enterprises` (`id`)) 解决 看样子是不能添加约束。然后我做了以下几步检查: 存储引擎 支持外键约束(MyISAM 不支持) 外键约束的主、副表数据类型严格一致 副表添加外键时,确认要参考的主表和目标字段已存在 按照第 3 步,由于 Laravel 的迁移文件名为 "2018_04_15_101341_create_users_table" 的前缀时间戳格式,所以我修改了要参考主表字段的那些文件的时间戳,让那些主表被优先创建。 网上看到也有改动 Laravel 框架源码的做法,我不太喜欢,也不推荐。总之,问题解决。 文章来源: Laravel 5.5

.NET Core 学习笔记3――EF Core

匿名 (未验证) 提交于 2019-12-02 22:10:10
EF Core (EntityFramework Core)是实体关系映射(O/RM)数据库访问框架。这个模式的好处就是让开发人员可以用对象模型来操作数据库,这是一种对开发人员较为友好的方式。 O/RM牛逼在哪? 非对象模型操作数据库,就要直接用sql语言来做大量的CURD操作(Creat 创建;update 更新;read 读取;delete 删除)。这些操作编写繁琐又容易出错,目的却只是为了操作数据库,而不是业务。而对象模型(O/RM)是基于业务,使用的就是自身的程序语言,相当于把操作数据库的细节给封装起来,让开发人员专心对付业务。但是这个模式也不是完美无缺,如果业务的重心,或者瓶颈就在于操作数据库,就是要精细化的控制数据库,那么封装就是多余的,即使再好的封装。 1. 创建模型 以下三种“约定”方式会产生模型(Model): 一、Dbset<模型a> 二、class 模型a{ list<模型b>; } 三、modelBuilder.Entity<模型c>(); [NotMapped] 注释特性能阻止产生模型映射到数据库。 Fluent API(流api)可以阻止映射:modelBuilder.Ignore<被阻止的类型>()。 三种模型控制的优先级是 Fluent API > 注释特性 > 约定 1.1 模型内部数据 默认拥有get;set;的公共属性会被映射。 1.1.1

EF CodeFirst系列(6)---配置1对1,1对多,多对多关系

匿名 (未验证) 提交于 2019-12-02 22:06:11
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下。 1. 1对0/1关系配置 1. 通过数据注释属性配置1对0/1关系 我们将要实现一个Student和StudentAddress实体的1对0/1关系,1对0/1关系指的是一个Student可有一个或者零个住址StudentAddress,但是一个StudentAddress必须对应一个Student。 在数据库中表现形式是StudentId在Student表中是主键,StudentAddressId在数据库中同时是StudentAddress的主键和外键 。 实体类的代码如下: public class Student { public int StudentId { get; set; } public string StudentName { get; set; } public virtual StudentAddress Address { get; set; } } public class StudentAddress { [ForeignKey("Student")] public int StudentAddressId { get; set; } public string Address1 {