模型、关系与数据库迁移
Django Web 开发#Python全栈#第十一阶段#Django Web 开发#模型、关系与数据库迁移约 792 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
Django 模型类、模型实例和数据库表是什么关系?
追问 新建 Python 实例是否立即写入数据库?主键、字段属性与持久化状态怎样区分?
常见模型字段应该如何根据业务选择?
追问 标题、正文、金额、状态和时间分别适合什么类型?为什么金额通常不宜直接采用浮点字段?
字段的 null 与 blank 有什么区别?
追问 数据库允许空值与校验允许空输入分别由谁决定?字符串字段为什么常常不宜同时保存空字符串和 NULL?
模型字段默认值如何定义?
追问 调用函数的结果与传入可调用对象有什么区别?时间和可变默认值怎样避免所有实例共用错误初始数据?
ForeignKey、OneToOneField 与 ManyToManyField 如何表达关系?
追问 用户资料、题目分类与题目标签怎样建模?多对多关系带额外字段时为何需要考虑中间模型?
外键 on_delete 的常见策略有什么业务影响?
追问 CASCADE、PROTECT 和 SET_NULL 怎样选择?为什么不能把 Django 的删除处理简单等同于所有数据库原生级联行为?
字段唯一性、UniqueConstraint、CheckConstraint 与索引分别解决什么问题?
追问 每位用户对每道题只能有一条练习记录,怎样表达?为什么索引不等于业务校验,应用检查也不能代替并发下的数据库约束?
makemigrations 与 migrate 有什么区别?
追问 迁移文件、迁移历史状态与实际数据库结构怎样对应?为什么创建迁移后表结构还可能没有变化?
修改模型却没有生成预期迁移,或数据库表与模型不一致,怎样排查?
追问 应用注册、迁移文件、已应用记录与实际连接数据库如何核对?为什么随意删除迁移或使用 fake 可能掩盖问题?
结构迁移与数据迁移分别适合什么任务?
追问 RunPython 为什么应考虑历史模型和可逆性?给已有大量记录增加必填字段时,如何安排默认值、回填与约束?
核对资料: Django 迁移。