zoukankan      html  css  js  c++  java
  • 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 表。

  • 相关阅读:
    java基础面试题-1
    深入探讨 Java 类加载器
    毕向东—Java基础知识总结(超级经典)
    nyoj-161-取石子 (四)
    nyist-751-破坏城市
    nyist-144-小珂的苦恼
    zoj-1047-I Think I Need a Houseboat
    zoj-1045-HangOver
    zoj-1037-Gridland
    hdoj-2268-How To Use The Car
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11965096.html
Copyright © 2011-2022 走看看