django的权限6表和 content_type

django的权限6表和 content_type

权限6表

我们之前做数据库表迁移的时候都会生成一大堆表,现在可以讲一下其中有些表是干什么的了。

img

先讲一下最开始的3表,有用User表,用来存用户的一大堆属性的,然后角色表,和权限表。每个用户都会有对应的角色,每个角色都有对应的权限,一个用户可以有多个角色,一个角色也可以有多个权限,所以就造成了外键字段有多个值,不符合数据库三大范式的设计。所以引出了6表。

img

第二排的第一张表和第三张表很容易理解,但是中间那张表的意义不太一样,他是直接用户和权限的关系表,因为存在一些用户,他没有角色,但是会有权限,比如说老板的儿子,很明显在角色表里设置一条记录是老板儿子是不可能的,而且老板儿子一定会有很多权限,所以就诞生了这张表。

content_type

# 给Django中的所有模块中的所有表进行编号存储到content_type表中
# 应用一:权限表的权限是操作表的,所有在权限表中有一个content_type表的外键,标识该权限具体操作的是哪张表

理解起来很抽象,所以用一个栗子

现在存在一个课程表,有免费课,学位课,会员课,免费课不用钱,不存在会员。学位课有价格,没有会员。会员课,没有价格,有会员。

"""
Course:
name、type、days、price、vip_type
基础	免费课  7		0
中级	学位课	 180	69
究极	会员课	 360    	 至尊会员
"""

这看上去挺正常的,但是如果你的记录多了起来,很可能会出现数十条price字段或者vip_type为空,这显然不符合数据库表的设计。所以把 price 和 vip_type 字段直接删掉,加一个 content_type_id字段。 这个字段的内容是一个新的表 content_type 表里记录的id。

完整版

"""
Course:
name、type、days、content_type_id
基础	免费课  7	  null
中级	学位课	 180   1
究极	会员课	 360   2

app01_course_1
id、price

app01_course_2
id vip_type

content_type表(Django提供)
id、app_label、model
1	app01	 course_1
2	app01	 course_2
"""

content_type 表里面是对应关系表的,在Course表里的记录如果有价格,就连表course_1,如果有 vip_type 就连表course_2 表。

posted @ 2019-12-01 08:41  chanyuli  阅读(240)  评论(0编辑  收藏  举报