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()

相关文章

  • 数据库设计范式

    数据库设计三大范式 数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都...

  • 数据库设计三范式与反范式

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...

  • mysql的优化总结(一)

    一。数据库设计方面 1)遵循数据库设计三大范式 ,适当的进行反范式设计 第一范式:1NF 原子性 字段不能再拆分 ...

  • python学习笔记-数据库07_高级操作_数据库设计

    数据库设计之三范式 范式:对设计数据库提出的一些规范,目前有迹可循的共有8中范式,一般遵循3范式即可。第一范式(1...

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

    一 * * * * * 项目设计理念 ① 权限设计 后台管理系统 登陆页面 (用户包括 * 管理员 超级用户) 权...

  • 数据库设计-三大范式

    讲到数据库设计,就需要先说一下数据库设计的三大范式(Normal Form)。 三大范式 第一范式(1NF):列属...

  • SQL范式

    范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据...

  • 范式

    范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据...

  • (系列7)数据库

    MySQL 数据库概念 范式 范式是数据库设计规范,范式越高则数据库冗余越小,但查询也更复杂,一般只需满足第三范式...

  • 数据库设计范式

    数据库设计范式 整理参考资料[1]参考资料[2] 数据库范式 设计关系数据库时,遵从不同的规范要求,设计出合理的关...

网友评论

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

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