• 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 表。

  • 相关阅读:
    LUA表的引用理解
    UNITY 打包安卓APK
    UNITY打包问题
    U3D 打包时找不到tag的问题
    break prefab instance的原理
    C#调用LUA函数
    LUA 利用#遍历表的问题
    U3D笔记11:47 2016/11/30-15:15 2016/12/19
    Unity3D 预设打包的注意事项
    回调 和 覆盖
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11965096.html
Copyright © 2020-2023  润新知