python---数据库设计的三大范式

作者: 幼姿沫 | 来源:发表于2020-05-14 17:21 被阅读0次

    一   * * * * *  项目设计理念

    ①    权限设计 

    后台管理系统  登陆页面  (用户包括 * 管理员 超级用户)

    权限不同看到的菜单个数是不同的,不同的身份有不同的行为

    不同等级的会员能看到的按钮以及功能也会不同

    ②   真实的项目后端管理平台   要实现以下几点*

    功能如下:

    1.输入用户名密码, 可以登陆到主页菜单

    2.不同的角色(管理员 用户)的用户显示的菜单个数不同

    3.同一角色用户(普通用户   vip用户),不同级别的用户现实的功能按钮也是不一样的

           ·同样是客户   vip客户就会有批量删除的功能 普通用户*没有删除的功能

    完成该权限管理系统RBAC的数据库设计

    提示:核心角色*用户 角色 权限 菜单

    数据库设计步骤:

    1.找对象(分析当前业务包含的哪些对象)

    2.找属性 (分析对象的属性有哪些)

    3.找关系(分析对象与对象之间的关系)

       N-N  独立一个中间表 中间表中有两个表的外键

         案例  商品和订单的关系

          

    建表遵循的原则:

    业务中包含的对象分析完中后,就可以进行建表,一般建表要遵循以下原则:

    1.一类物体的信息保存在一张表中

    2.对象的每个属性和列一一对应

    3.每个表中都会有主键 

          唯一标识:一行数据 一个对象  的列就叫做主键  主键可以是多个列

    4.添加约束保证数据的完整性  限制条件

       数据的真实可靠   学名叫  完整性

       主键约束    primary key 主键唯一且不为空

        自增约束   auto_increment  自动增长

        非空约束  not null

     ·· 唯一    unique    不能重复

       外键约束:   foreign  key ====》成绩表保存学生id 课程id  

    特例:等级明显而不包含敏感数据的信息建议存储为一张表格

    二      ****   数据库设计三大范式三大原则

    按照以上步骤设计数据库,是会满足三大范式的。

    第一范式   原子性 

    根据业务需求保证表中每个列不可再拆分

    比如:存储学生基本信息,地址列足够了

    第二范式  相关性

    保证表中每个列都和主键相关,只要满足一类物体信息保存在一张表中,能满足第二范式

    ## 所有省                                                                                                                                    select * from area where pcode is nul                                                                      l # 查山东所有的市                                                                                                                     select code from area where name ='山东' #37 select * from area where pcode = 37 select * from area where pcode =( select code from area where name ='山东' )

    第三范式:直接相关性

    一般用于多个列联合作为逐渐的中间表

      其他列必须和每个主键直接有关系,不能只是和某个列有关系

    订单和商品之间的关系

    三  *   *   学员管理系统 

            学员管理系统

    import re

    from MysqlHelper import *

    '''

    案例使用工具类增加

    1. 获取数据库对象

    2. 准备sql

    3. 准备参数

    4. 调用CURD功能

    '''

    def demo_add():

    db = MysqlHelper('localhost',3306,'root','root','db02')

    print(db)

    sql = "insert into tbl_users(uname,python,english,c) values(%s,%s,%s,%s)"

    params = ['张三',100,100,100]

    num = db.insert(sql,params) # 工具类中封装的方法: insert,

    delete,update,get_one, get_all

    if num>0:

    print('成功')

    else:

    print('失败')

    # 页面

    def menu():

    print('''

    ===========功能菜单============

    1. 增加人员信息

    2. 删除人员信息

    3. 修改人员信息

    4. 查询人员信息

    5. 成绩排序

    6. 总人数

    7. 查询所有

    0. 退出系统

    ==============================

    ''')

    # 核心功能

    def main():

    mark = True #标记,循环结束标记!

    while(mark):

    menu() # 显示菜单,

    option = input('请选择菜单:') # 控制台输入的数据默认类型是字符串!

    option_str = re.sub('\D',"",option) #只提取数字

    if option_str in ['0','1','2','3','4','5','6','7']:option_int = int(option_str) #转换为整数

    if option_int == 0: #退出系统

    print('您已经退出人员管理系统!')

    mark = False # 更改标记为False, 循环自动停止!

    elif option_int ==1: # 增加人员

    insert()

    elif option_int ==2: #删除人员

    delete()

    elif option_int ==3: #修改

    update()

    elif option_int ==4: #查询人员

    show()

    elif option_int ==5: #排序

    sort()

    elif option_int ==6: #统计

    total()

    elif option_int==7:

    show_all()

    def insert():

    print('--------增加人员信息---------')

    students = [] # 列表,保存N个人员信息

    mark = True # 控制是否继续输入人员信息的标记!

    while mark:

    uname = input('请输入名字:')

    if not uname: # 名字为空,跳出循环

    break

    try:

    english = int(input('请输入英语成绩:'))

    python = int(input('请输入Python成绩:'))

    c = int(input('请输入C成绩:'))

    except:

    print('输入无效,不是数字,重新输入!')

    continue

    s = {"uname":uname,"english":english,"python":python,"c":c}

    students.append(s) #追加到列表 [{},{},{}...]

    inputMark = input("是否继续添加?(y/n):")

    if inputMark =='y': #继续添加

    mark = True

    else: # 不继续

    mark = False

    #循环结束后,把人员列表[{},{}] 保存到数据库中

    save(students)

    '''

    操作数据步骤

    1. 创建db对象

    2. 准备sql

    3. 准备参数

    4. 执行:CURD

    5. 处理结果

    '''

    def save(students):

    print('保存人员列表:')

    print(students)

    db = MysqlHelper('localhost', 3306, 'root', 'root', 'db02')

    for stu in students:数据库设计

    数据库设计步骤

    找对象(分析当前业务包含哪些对象)

    找属性(分析对象的属性有哪些)

    找关系(分析对象和对象之间关系)

    N-N: 独立一个中间表 (中间表中两个表的外键。 )

    案例: 商品和订单关系!

    建表遵循的原则:

    业务中包含的对象分析完后,就可以建表。一般建表时要遵循如下原则:

    1. 一类物体的信息保存在1张表中

    2. 对象每个属性和列一一对应

    3.每个表中必须有主键!

    唯一标识一行数据(一个对象)的列就叫“主键” 【主键可以是多个列!】

    规则: 为了避免没有主键,习惯于添加一个虚拟的主键列id,而且设置为自增

    4. 添加约束保证数据完整性(限制条件)

    数据的真实可靠,学名叫“完整性”

    sql = "insert into tbl_users(uname,english,python,c)

    values(%s,%s,%s,%s)"

    params =

    [stu.get('uname'),stu.get('english'),stu.get('python'),stu.get('c')]

    db.insert(sql,params)

    print('增加完成!')

    def delete():

    print('删除学员')

    def update():

    print('修改学员')

    def show():

    print('查询学员')

    def sort():

    print('排序学员')

    def total():

    print('总人数')

    def show_all():

    print('查询所有')

    if __name__ == '__main__':

    main()

    相关文章

      网友评论

        本文标题:python---数据库设计的三大范式

        本文链接:https://www.haomeiwen.com/subject/qcptohtx.html