图书信息(BookInfo) 英雄信息(HeroInfo) 1 : N 具体实现设计 BookType图书类型模型类 类属性 数据类型 备注 id IntegerField(整型) 主键、自增 type_name...CharField(字符型) 图书类型 BookInfo图书模型类 类属性 数据类型 备注 id IntegerField(整型) 主键、自增 book_type IntegerField(整型)ForeignKey...图书类型,外键 title CharField(字符型) 图书名称 author CharField(字符型) 图书作者 pub_date CharField(字符型) 图书出版日期 isbn CharField...) 图书喜欢数 book_collect_num IntegerField(整型) 图书收藏数 HeroInfo图书英雄模型类 类属性 数据类型 备注 id IntegerField(整型) 主键自增...)Foreignkey 英雄所属图书,外键 Django模型代码 # -*- coding:utf-8 -*- """ @Author :Hui @Desc :{模型设计模块} """ from
图书信息(BookInfo) 英雄信息(HeroInfo) 1 : N 具体实现设计 BookType图书类型模型类 类属性 数据类型 备注 id IntegerField(整型) 主键、自增 type_name...CharField(字符型) 图书类型 BookInfo图书模型类 类属性 数据类型 备注 id IntegerField(整型) 主键、自增 book_type IntegerField(整型)...ForeignKey 图书类型,外键 title CharField(字符型) 图书名称 author CharField(字符型) 图书作者 pub_date CharField(字符型) 图书出版日期...) 图书喜欢数 book_collect_num IntegerField(整型) 图书收藏数 HeroInfo图书英雄模型类 类属性 数据类型 备注 id IntegerField(整型) 主键自增...)Foreignkey 英雄所属图书,外键 Django模型代码 # -*- coding:utf-8 -*- """ @Author :Hui @Desc :{模型设计模块} """
1、无需连表查询性能低,省硬盘空间(选项不固定时用外键) 2、在modle文件里不能动态增加(选项一成不变用Django的choice) 其他字段 db_index = True 表示设置索引 unique...小写表名; 1对多:对象.外键.关联表字段,values(外键字段__关联表字段) 多对多:外键字段.all() 反向连表操作总结: 通过value、value_list、fifter...models.ForeignKey('UserType') 到B表(注意外键表名加引号) 就意味着 写在写A表的B表主键,(一列),代表B表的多个(一行)称为1对多, 查询 总结:利用orm获取 数据库表中多个数据...,外键__外键列,反向是小写的表名 UserInfo.objects.values_list('nid','ug_id','ug__title') 反向连表: 反向操作无非2种方式: 1、通过对象的形式反向跨表...().first() result = obj.userinfo_set.all() [userinfo对象,userinfo对象,] 小写的表名 得到有外键关系的列 #因为使用values取值取得是字典的不是对象
所以外键字段健在书表中 publish = models.ForeignKey(to='Publish') # to用来指代跟哪张表有关系 默认关联的就是表的主键字段 """...一对多外键字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id """ # 书跟作者是多对多的关系外键字段建在任意一方都可以...,建议建在查询频率高的一方 一对多外键字段创建的时候同步到数据中表字段会自动加_id后缀,如果我们手动加了_id orm也会在给我们加一次,所以我们这里不要加_id 多对多关系,django orm会自动帮我们创建书籍和作者的第三张关系表...3.9Django1.x和2.x的版本的路由层区别 1.Django2.x中默认的url通过path接收,path的第一个输入值不是正则表达式,里面写的是什么就按什么匹配。...3.path提供了五种转换器,能够将匹配到的数据转成对应的数据类型而且还支持自定义转换器,用于解决数据类型转换问题和正则表达式冗余问题。
1、无需连表查询性能低,省硬盘空间(选项不固定时用外键) 2、在modle文件里不能动态增加(选项一成不变用Django的choice) 其他字段 db_index = True 表示设置索引 unique...小写表名; 1对多:对象.外键.关联表字段,values(外键字段__关联表字段) 多对多:外键字段.all() 反向连表操作总结: 通过value、value_list、fifter 方式反向跨表...1对多关系,也称为多对多关系; 在orm中设置如果 A表设置了外键字段user=models.ForeignKey('UserType')到B表(注意外键表名加引号) 就意味着 写在写A表的B表主键,...','ug_id','ug__title') #注意正向连表是 外键__外键列 反向是小写的表名 3....小写的表名 得到有外键关系的列 #因为使用values取值取得是字典的不是对象,所以需要 小写表名(外键表)__ v = UserGroup.objects.values('id'
orm相关的数据库查询优化 惰性查询 惰性查询指当我们只查数据库而不是用这些数据时,Django不会执行查询数据库的代码,目的是减少不必要的数据库操作,降低数据库的压力。...,特点:内部自动连表操作,会将括号内外键字段所关联的表与当前表自动拼接成一张表,然后将表中的数据一个一个查询出来封装成一个一个的对象。...这样做的好处:跨表查询也不需要重复走数据库,减轻数据库压力。select_related()括号内放多个外键字段,逗号隔开,会将多个外键字段关联的表与当前表拼成一张大表。...,特点:按步骤查询多张表,然后将查询结果封装到对象中,给用户的感觉好像还是连表操作,括号内支持传多个外键字段,每放一个外键字段就会多走一条SQL语句,多查一张表。...3.Django后端针对json格式的数据不会做任何的处理,只是将数据原封不动的放在了request.body中,我们需要手动对其进行反序列化处理。
django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...自Django3.2后,可以在settings.py中配置DEFAULT_AUTO_FIELD参数来设置主键的数据类型,默认是DEFAULT_AUTO_FIELD = ‘django.db.models.BigAutoField...’,在Django3.2之前,默认生成的主键数据类型是AutoField....外键 外键这个东西,通常都是在业务逻辑层面来实现的,而不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的外键约束。在这里只是简单的介绍一下。...外键:通过使用models.ForeignKey来设置外键,ForeignKey的第一个参数是要关联的模型类名,第二个参数是on_delete。
不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF...select 字段1,字段2... from 主表 inner join 从表 on 主表.主键=从表.外键 例如:查询学生的信息[ 成绩、名字、班级 ] 我们给学生表添加一个学生信息,然后使用该学生的主键....主键=从表.外键 例如,上面的成绩id为102的学生, 我们使用右连接查询。...from 主表 left join 从表1 on 主表.主键=从表1.外键 left join 从表2 on 主表.主键=从表2.外键 # 这里和从表2连接的on条件看实际情况,也会出现从表...1.主键=从表2.外键的情况 left join 从表3 on 主表.主键=从表3.外键 # 这里可以是(从表1或从表2).主键=从表2.外键的情况 left join ...
但是,XCode的多数据库反向工程,也是有代价的,不同数据库的数据类型相差十万八千里,我们不可能完全支持。 所以,我们只做了常见的一些数据类型支持,但是这些已经足以满足99%的要求。...最佳数据类型如下: 1,整型。Int32是标准配置,这个必须有的。在Oracle,整型就是小数为0的Numeric 2,长整型。Int64,大部分数据库都有吧。 3,短整型。...1,除了字符串长度外,其它类型绝对绝对,尽可能的不要设置其它属性,包括长度、精度、小数位数,否则XCode不能实现完美迁移 2,XCode目前不支持各种数据库的外键。...新增的表间关系是通过猜测得到的,规则:字段名等于另一个表名加主键名时,认为是外键 3,不要用Guid类型和二进制类型,XCode只能支持正向工程,不能支持它们的反向工程。...最后补一句: 我们只做最常见的80%日常工作,什么特别的情况,自己想办法!
主键类型不一定非是整型 表纪录操作 表纪录之增,删,改 -- 1.增加一条记录insert /*insert [into] tab_name (field1,filed2,......id INT PRIMARY KEY auto_increment, name VARCHAR (20), charger_id TINYINT, --切记:作为外键一定要和关联主键的数据类型保持一致...语句 --外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update --外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对...-- 应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的 -- on update/on delete子句...记录时,同步update/delete掉子表的匹配记录 -----外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除-------- FOREIGN KEY (charger_id
将字符串转换成数字类型存储,如:将 IP 地址转换成整形数据 MySQL 提供了两个方法来处理 ip 地址 inet_aton 把 ip 转为无符号整型 (4-8 位) inet_ntoa 把整型的 ip...过大的长度会消耗更多的内存。 2. 避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据 a....而且对于这种数据,MySQL 还是要进行二次查询,会使 sql 性能变得很差,但不是说一定不能使用这样的数据类型。...Innodb 是按照主键索引的顺序来组织表的 不要使用更新频繁的列作为主键,不适用多列主键(相当于联合索引) 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据的顺序增长) 主键建议使用自增...索引 SET 规范 尽量避免使用外键约束 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引 外键可用于保证数据的参照完整性,但建议在业务端实现 外键会影响父表和子表的写操作从而降低性能
常用字段 (1) AutoField 自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。...在PostgreSQL上使用时,使用的数据类型为interval,在Oracle上使用为。否则,将使用微秒。...如果需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。...当删除由a引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为。...SET_NULL:删除时把外键置为null,当null=True时才可以使用。 SET_DEFAULT:把外键置为默认值,必须要设置默认值时才可以使用。
Django 1.10新增。 BigIntegerField 64位整型,类似IntegerField。...如果设置了该选项值,那么默认的表单组件将变为一个select box,而不是标准是text field,且将被限制从给定choice中选择choice。...删除被参照表的某条表记录,同时级联删除参照表中,同待删除记录存在外键关联关系的记录。 PROTECT 删除被参照表中的某条表记录,如果参照表中,存在与该记录有外键关系的记录,则不让删除。...SET_NULL 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外键关联的记录的外键列值为默认值。必须为外键列设置默认值。
; 数据类型: 数据类型 关键字 整型 int integer 浮点类型 double, floatdecimal(6,2)整个小数长5位,小数点不占位,小数是两位(9999.99) 字符串型 char...定义:外键约束是表的一个特殊字段,经常和主键约束一起使用,对于两个具有关联关系的表来说,相关字段中主所在表就是主表(父表),外键所在表就是从表(子表) 特点(定义一个外键时,需要遵守的规则): 主表必须已经存在于数据库中...,或者是当前正在创建的表 必须为主表定义主键 主键不能包含空值,但是允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,那么这个外键的内容就是正确的 在主表的表名后面指定列名或列名的组合...,那么这个列或列的组合必须是主表的主键或候选键 外键中列的数目必须和主表的主键中的列的数目相同 外键中列的数据类型必须和主表的主键中的列的数据类型相同 方式一:在创建表的时候设置外键约束 语法: constraint...实现:需要借助第三张中间表,中间表至少包含两个字段,将多对多的关系拆成一对多的关系,中间表至少有两个外键,分别指向原来两个表的主键 多表联合查询 介绍:多表查询就是同时查询两个或两个以上的表,因为有时候用户在查看数据的时候
扩展功能,字段值自增等 数据表高级操作 克隆表,将数据表的数据记录生成到新的表中 删除记录后主键记录重头开始自增 创建临时表 创建外键约束,保证数据的完整性和一致性 MySQL 六种约束 ----...SQL 字段数据类型 int:整型,默认长度是11 float:单精度浮点,4字节32位 double:双精度浮点,8字节64位 char:不可变长的字符类型,读取速度快,耗空间,长度不足会补空格。...,保证数据的完整性和一致性 外键的定义:如果同一个属性字段X 在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。...主键表和外键表的理解: (1)以公共关键字作主键的表为主键表(父表、主表) (2)以公共关键字作外键的表为外键表(从表、外表) 注意: 1. 与外键关联的主表的字段必须设置为主键。 2....表的 hobid 字段和 HOBBY 表的 hobid 字段建立外键关联。
一 创建模型 表和表之间的关系 一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束...,我们学mysql的时候是怎么建立的,是不是手动创建一个第三张表,然后写上两个字段,每个字段外键关联到另外两张多对多关系的表,orm的manytomany自动帮我们创建第三张表,两种方式建立关系都可以,...但是我们就不能使用ORM外键相关的方法了,所以我们单纯的将外键换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM外键方法的。...#db_constraint=False只加两者的关系,没有强制约束的效果,并且ORM外键相关的接口(方法)还能使用,所以如果将来公司让你建立外键,并且不能有强制的约束关系,那么就可以将这个参数改为False...(pk=1).first() # book_obj.publish 是主键为1的书籍对象关联的出版社对象,book对象.外键字段名称 print(book_obj.publish.city)
前言 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。...整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个属性,括号内的数字是毫无意义的。 zerofill的作用就是用0在有效数字前面用0补齐剩下的空间,直至设定的宽度。...int auto_increment primary key, name varchar(5) unique ); 八、外键 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或...当定义外键后,要求外键列数据必须在主表的主键列存在或为null 关键词:foreign key (字段名) references 主表(列) 案例: 我们可以看到,学生信息是和班级表有关系的:某个班还有学生的时候我们不能直接删除这个班的数据...因此诞生了外键来约束。
这是纯粹的验证操作,外键和多对多操作使用它来决定两个对象之间是否应该允许一个关联。...这个方法还可以用来决定一个给定数据库上某个模型的可用性。 注意,如果这个方法返回False,迁移将默默地不会在模型上做任何操作。这可能导致你应用某些操作之后出现损坏的外键、表多余或者缺失。...目前不提供跨多个数据库的外键或多对多关系的支持。...为了保持两个对象之间的关联,Django 需要知道关联对象的主键是合法的。如果主键存储在另外一个数据库上,判断一个主键的合法性不是很容易。...然而,如果你正在使用SQLite 或MySQL的MyISAM 表,则没有强制性的引用完整性;结果是你可以‘伪造’跨数据库的外键。但是Django 官方不支持这种配置。
2.第二范式 确保表中的每列都和主键相关 每个表只描述一件事 主要针对联合主键而言,不存在部分依赖,每一列都跟联合主键有关系,而与联合主键中的其中一个键无关系 比如要设计一个订单信息表,因为订单中可能会有多种商品...第三范式需要确保数据表中的,每一列数据都和主键直接相关,而不能间接相关解决间接相关,把不直接相关的再建一张表,采用外键形式将两张表关联....比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。...越简单的数据类型在计算时需要更少的CPU周期,比如,整型就比字符操作代价低,因而会使用整型来存储ip地址,使用DATETIME来存储时间,而不是使用字符串。...只有在存储的字符串长度几乎相等,使用 char 定长字符串类型。 (7)不得使用外键与级联,一切外键概念必须在应用层解决。
领取专属 10元无门槛券
手把手带您无忧上云