python 面试题 23 Django ORM 表设计

什么是ORM?
什么是表设计?
什么是代码先行,模型先行,数据库先行?
什么是脚手架?


为什么在Django里面我们没有写SQL也能操作数据库?

ORM =====Object-Relation-Mapping对象关系映射

映射,指两个元素的集之间元素相互“对应”的关系如一对一,一对多,多对多
这里写图片描述

面向对象里面类,实例,属性和面向关系性数据库的表,行列,之间 纵向的数学本质是一样的,横向具有类似性,所以出现了对象关系映射

ORM的实现思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。

因此,ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。

具体参考如下2个图:






对象-关系映射,是随着面向对象的软件开发方法发展而产生的。

面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。

对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。

内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。

因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
对象和关系的实现方式是?
ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。
这里写图片描述

既然有了ORM,那么开发的顺序究竟应该怎样?

这里写图片描述

数据库先行(Database First):基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。

模型先行(Model First):先利用某些工具(如VS的EF设计器)设计出实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。

代码先行(Code First):先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

不同态度:
http://www.codeweblog.com/frans-bouma%E8%AE%A4%E4%B8%BA%E4%BB%A3%E7%A0%81%E5%85%88%E8%A1%8C%E7%9A%84orm%E6%98%AF-%E6%84%9A%E8%A0%A2%E7%9A%84/

总的来说

编程中脚手架是什么鬼?

这里是stackoverflow上的一个回答:

Scaffolding is a meta-programming method of building database-backed software applications. It is a technique supported by some model-view-controller frameworks, in which the programmer may write a specification that describes how the application database may be used. The compiler uses this specification to generate code that the application can use to create, read, update and delete database entries, effectively treating the template as a “scaffold” on which to build a more powerful application.

翻译过来就是:

“脚手架”是一种元编程的方法,用于构建基于数据库的应用。许多MVC框架都有运用这种思想
程序员编写一份specification(规格说明书),来描述怎样去使用数据库;而由(脚手架的)编译器来根据这份specification生成相应的代码,进行增、删、改、查数据库的操作。我们把这种模式称为”脚手架”,在脚手架上面去更高效的建造出强大的应用!

参考
orm原理https://blog.csdn.net/qq_27093465/article/details/52896288
数据库表和表之间的三种关系的对象实现
https://blog.csdn.net/qq_33574890/article/details/78815244
orm优缺点https://www.cnblogs.com/feng9exe/p/5598737.html

脚手架参考https://blog.csdn.net/ialexanderi/article/details/78760000

代码先行 https://www.cnblogs.com/weiweixiang/p/5548701.html

注:django,flask学习时,屡次碰到,所以整理以下!
感谢各位大佬教导!

猜你喜欢

转载自blog.csdn.net/weixin_41853490/article/details/81365447
今日推荐