DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • Django

  • 第一次学drf

  • 第二次学drf

  • 温故知新

    • 学习计划
    • 常见问题及配置
    • 数据表设计经验
      • 字段类型
      • 字段类型参数
      • 数据表设计
        • 一些常识
        • 一对一关系场景感
    • Django精简总结
    • 源码知识点
    • drf通篇概览
    • drf-前篇
    • drf-后篇
  • flask

  • 后端
  • 温故知新
DC
2024-05-15
目录

数据表设计经验

数据库设计涉及的知识点远不指这些, 我只是在此处总结下 经常遇到的以及要特别注意的.(*≧ω≦)

# 字段类型

字段类型需特别注意的:

字段类型 经验
CharFiled CharFiled对应的是varchar,但超过了255个字符我们就会使用TextField
TextField 最多65535个字符. 若需要的比这个还多,就需要放到文件中去,写入文件的路径.
IntegerField 范围在-2147483648 to 2147483647.
一般不用它来存手机号(位数也不够),手机号会直接用字符串存.
BooleanField True/False,其实数据库是不支持真假的,实际在表中存的是0和1
DecimalField 跟金额相关会用到它,金额会有小数

# 字段类型参数

字段类型参数需特别注意的:

  • 在mysql里,默认可以为空.
    在Django的ORM里默认不为空, 即Django中,默认blank=False、null=False
    • null是针对数据库而言,如果null=True,表示数据库的该字段可以为空, 那么在新建一个model对象的时候是不会报错的;
    • blank是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填.
      比如admin后台界面下增加 model 一条记录的时候. <即用户在页面操作时,该字段值可以为空.>
  • 针对可能列举完的数据都适用于choices参数!!

# 数据表设计

# 一些常识

- 建立外键关系的ForeignKey和OneToOneField所在的字段,会在数据表中为该字段后面自动加上 _id
- ManyToManyField所在的字段是一个虚拟字段!!通过ManyToManyField创建的第三张表不能扩展字段.
- 不在ORM的Meta中设置db_table值,那么在数据库中创建的默认表名是 app名_表名小写
- 可以通过在ORM表中写方法__str__,改变 一条表记录对象 的展示格式!! 
  即print打印对象,会触发了对象的__str__方法! 不设置,就类似这样 Role object (1)
- 在创建数据时,有四种是不用传值的,会默认给值:
  DateField(auto_now=True,auto_now_add=True) / DateTimeField(auto_now=True,auto_now_add=True)
  字段对象设置了字段类型参数default
  自增的字段id
  字段对象设置了字段类型参数null=True,blank=True,允许为空.
1
2
3
4
5
6
7
8
9
10

# 一对一关系场景感

>> 一对一的关系可以用用户注册和用户注册成功后完善自己的信息对应的用户表和用户详情表来构建场景感.
Author表有name字段; 用户详情表有外键字段author
因为用户注册时是没有额外信息的.
- 若没有详情表,将额外的用户信息字段加到Author表里,那么这些额外的字段都得设置成blank=True,null=True.
- 若有详情表,但将外键字段设置在Author表中,那么该外键字段得设置blank=True,null=True.
- 若有详情表,将外键字段设置在详情表中,那么该外键字段是无需设置blank=True,null=True的!!

author = models.ForeignKey(to='Author', on_delete=models.CASCADE, unique=True)
author = models.OneToOneField(to='Author', on_delete=models.CASCADE)
1
2
3
4
5
6
7
8
9
一对多,外键放到多的一方
多对多,外键放到经常查询的那一方
1
2
常见问题及配置
Django精简总结

← 常见问题及配置 Django精简总结→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式