一 * * * * * 项目设计理念
① 权限设计
后台管理系统 登陆页面 (用户包括 * 管理员 超级用户)
权限不同看到的菜单个数是不同的,不同的身份有不同的行为
不同等级的会员能看到的按钮以及功能也会不同
② 真实的项目后端管理平台 要实现以下几点*
功能如下:
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()
网友评论