更:
商业系统中最常用的资料库就是关联式资料库(Relational Database),开发者先以资料库模型(Database model)来规划模型内容以及资料之间的关联(Relationship),然后依据规格在资料库中产生资料表(数据表)
这好像建筑师先绘出建筑图,然后依图施工来产生建筑物。资料库模型就是建筑图,资料表就是建筑物。我们也可以将资料库模型视为一个有栏位标题与栏位资料的表格
假设有A与B两个资料库模型,两者之间的资料关联有以下三种:
ㄧ一对关联(一对一):模型A里的一笔资料仅能对应到模型B里的一笔资料,反之亦然,Django的栏位资料型态为OneToOneField(一对一栏位)
一对多关联(一对):模型A里的一笔资料仅能对应到模型B里的多笔资料,而模型B里的一笔资料仅能对应到模型A里的一笔资料,Django的栏位资料型态为ForeignKey(外来键)
对多对多关联(多对多):模型A里的一份资料能对应到模型B里的多笔资料,反之亦然,Django的栏位资料型态为 ManyToManyField(多对多栏位)
在关联式资料库中,一般而言资料的存取是利用结构化查询语言(SQL),但Django的资料库模组(资料库模组)使用「物件关联对应」(Object-relational映射(ORM)技术来取代SQL
Django将物件导向语言对应到SQL语言,因此开发者只要撰写物件导向语言来存取资料库,就不需要撰写一般的SQL语言了
这样做法有以下优点:
安全性高:完全杜绝SQL注入(SQL注入)攻击(https://en.wikipedia.org/wiki/SQL_injection)
SQL语法简单:物件导向式语法比SQL语法要简单许多
可以更换不同的资料库,而不需要改写程序:因为不同厂商为了绑定消费者,还是会自订一些专属的SQL语法,盔甲和其他资料库的SQL语法不相容,因此消费者就不敢随意更换资料库
下图说明直接在系统中编写符合A厂商资料库的SQLa语言,未来是否要更换为B厂商资料库,那就会出问题。然而,如果在系统中编写物件导向语言,Django的ORM中介软体(中间件)会负责转为不同的SQL语言(SQLa或SQLb)
谢谢大家~
共同学习,写下你的评论
评论加载中...
作者其他优质文章