部门用户权限应用的设计和创建(进行中)

news2024/12/23 12:36:29

数据库表设计

代码实现之前首先是表设计,

六个基本步骤

1.需求分析 (分析用户需求,包括数据、功能和性能需求)
2.概念结构设计(主要采用 E-R图)
3.逻辑结构设计 (将ER图转换成表,实现从E-R模型到关系模型转换)

4.数据库物理设计 (为设计的数据库选择合适的存储结构和存取路径)

5.数据库的实施(包括编程 测试和试运行)
6.数据库运行与维护


三大范式

1.确保每列原子性,即不可再分 ;
2.确保每列都与主键相关;
3.确保每列都和主键直接相关,而不是间接相关

表设计

 涉及到的表有用户表(USER_TEST_WXX)、部门表(DEPT_TEST_WXX2)、用户部门中间表(DEPT_USER__TEST_WXX)、角色表(ROLE__TEST_WXX)、用户角色中间表(ROLE_USER_TEST_WXX)、权限表permission(PERM__TEST_WXX)、角色权限中间表(PERM_USER_TEST_WXX),共计四张实体表,三张中间表。

关系

一个用户属于一个部门

一个用户拥有一个角色
一个角色有多个操作权限
一个操作权限可以属于多个角色

一个角色可以分配给多个用户

一个部门下有多个用户

ER图

画出来的ER图如下:

 涉及的简单字段有

 创建新表

-- 创建部门表
create table DEPT_TEST_WXX2
(
--     主键自增generated by default as identity primary key
    DEPT_ID     NUMBER generated by default as identity primary key not null,
    NAME        NVARCHAR2(64)                                       not null,
    DESCRIBE    NVARCHAR2(256),
    CREATE_DATE DATE,
    UPDATE_DATE DATE
);

-- 创建角色表
create table ROLE_TEST_WXX
(
--     主键自增generated by default as identity primary key
    ROLE_ID     NUMBER generated by default as identity primary key not null,
    NAME        NVARCHAR2(64)                                       not null,
    DESCRIBE    NVARCHAR2(256),
    UPDATE_DATE DATE
);

-- 创建用户角色表(中间表)
create table ROLE_USER_TEST_WXX
(
--     主键自增generated by default as identity primary key
    ROLE_USER_ID     NUMBER generated by default as identity primary key not null,
    ROLE_ID     NUMBER not null,
    USER_ID     NUMBER not null,
    REMARK    NVARCHAR2(256),
    UPDATE_DATE DATE
);

-- 创建权限表
create table PERM_TEST_WXX
(
--     主键自增generated by default as identity primary key
    PREM_ID     NUMBER generated by default as identity primary key not null,
    NAME        NVARCHAR2(64)                                       not null,
    DESCRIBE    NVARCHAR2(256),
    UPDATE_DATE DATE
);

-- 创建角色权限表(中间表)
create table ROLE_PERM_TEST_WXX
(
--     主键自增generated by default as identity primary key
    ROLE_PERM_ID     NUMBER generated by default as identity primary key not null,
    ROLE_ID    NUMBER not null,
    PERM_ID    NUMBER not null,
    REMARK     NVARCHAR2(64),
    UPDATE_DATE DATE
);

现在是新创建的表引入

角色信息交互式网格

注意!!!

1. 创建好交互式网格之后记得导入工具包url,后续行选中用得到

2.关闭“值受保护”,便于后续操作,否则会出现新增/修改无法执行

 新增、修改用到的空白页创建

 3.点击修改因为要传入选中id,所以要有客户端条件

!utils.checkNull($v('P7_ROLE_ID')) && $v('P7_ROLE_ID').split(',').length == 1

 4.如果为真,则将角色网格选中的id传到表单进行修改,这一步是传递id 

5.有了真操作,还有假操作,不满足哦情况则为假

P7角色删除执行的PL/SQL代码

declare
    V_COUNT number(18) := 0;
 begin
     -- 删除关联的用户角色数据
    DELETE ROLE_USER_TEST_WXX WHERE ROLE_ID IN(SELECT * FROM TABLE(SPLITSTR(:P7_ROLE_ID,',')));
    --删除角色数据
    DELETE ROLE_TEST_WXX WHERE ROLE_ID IN(SELECT * FROM TABLE(SPLITSTR(:P7_ROLE_ID,',')));
    V_COUNT:= SQL%ROWCOUNT;
    APEX_UTIL.SET_SESSION_STATE('P7_ROW_COUNT',V_COUNT);   
 end;

6.记得提交输入项和返回项!!!

 处理→ 处理之后→ 转到对应表单 → 行为→ 类型 重定向→ 目标 13,还设置了项,将id绑定

便于后续操作。

角色表单

1.新建P13_ROW_COUNT,记得关闭“值受保护”

 执行修改的代码

declare
    v_row_count number(10) := 0;

begin
    update ROLE_TEST_WXX set NAME = :P13_NAME,
     DESCRIBE =:P13_DESCRIBE,
     UPDATE_DATE = sysdate 
     where ROLE_ID = :P13_ROLE_ID;
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P13_ROW_COUNT',v_row_count);
end;

提交的项:P13_ROLE_ID、P13_NAME、P13_DESCRIBE

返回的项:P13_ROW_COUNT

权限信息交互式网格

创建网格和表单

【错误记录】PL/SQL: ORA-00904: "PERM_ID": 标识符无效

 在执行点击删除时pl/sql代码报错

ORA-06550: 第 7 行, 第 32 列: PL/SQL: ORA-00904: "PERM_ID": 标识符无效

 解决方法

1、表名写错了,仔细检查核对一下表。

2、字段名写错了,仔细检查核对一下表。

3、表中无该字段,仔细检查核对一下表。

4、字段包含了Oracle的关键字,把报错的字段用单引号括起来试试

后续

经检验1.2.3皆正确,于是在“PERM_ID”加上单引号试试,可以了(双引号也试过,不行)

展现出来是这样的

 啊?交互式网格怎么变表单了?

为了一探究竟重新建了一个,这次不带表单

【错误记录】行选中失败

 查看了一下,居然是字段PERM_ID写错成PREM_ID,破案了终于

 怪不得之前关键字报错,重新全改了

declare
    V_COUNT number(18) := 0;
 begin
     -- 删除关联的角色权限数据
    DELETE ROLE_PERM_TEST_WXX WHERE PREM_ID IN(SELECT * FROM TABLE(SPLITSTR(:P18_PREM_ID,',')));
    --删除权限数据
    DELETE PERM_TEST_WXX WHERE PREM_ID IN(SELECT * FROM TABLE(SPLITSTR(:P18_PREM_ID,',')));
    V_COUNT:= SQL%ROWCOUNT;
    APEX_UTIL.SET_SESSION_STATE('P18_ROW_COUNT',V_COUNT);   
 end;

改过来以后会报错

【错误记录】PL/SQL: ORA-00904: "PREM_ID": 标识符无效

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-06550: 第 5 行, 第 37 列:
PL/SQL: ORA-00904: "PREM_ID": 标识符无效。

找到了,中间表又是对的PERM_ID,盖亚!!!

 我真想给粗心的自己两巴掌

正确的pl/sql如下

declare
    V_COUNT number(18) := 0;
 begin
     -- 删除关联的角色权限数据
    DELETE ROLE_PERM_TEST_WXX WHERE PERM_ID IN(SELECT * FROM TABLE(SPLITSTR(:P18_PREM_ID,',')));
    --删除权限数据
    DELETE PERM_TEST_WXX WHERE PREM_ID IN(SELECT * FROM TABLE(SPLITSTR(:P18_PREM_ID,',')));
    V_COUNT:= SQL%ROWCOUNT;
    APEX_UTIL.SET_SESSION_STATE('P18_ROW_COUNT',V_COUNT);   
 end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习的“前世今生”

1、“感知机”的诞生 20世纪50年代,人工智能派生出了这样两个学派,分别是“符号学派”及“连接学派”。前者的领军学者有Marvin Minsky及John McCarthy,后者则是由Frank Rosenblatt所领导。 符号学派的人相信对机器从头编程,一个…

Vue-5.编译器idea

关闭 IDEA 自动更新 IDEA无法搜索插件 填写idea下载插件的官方地址点击ok测试成功则ok https://plugins.jetbrains.com/idea 全局内存配置(重启后生效) 部署 Alibaba Cloud toolkit(部署代码的利器) Git(需要安装gi…

人工智能原理(4)

目录 一、确定性推理 1、推理方式 2、控制策略 二、推理的逻辑基础 1、永真和可满足性 2、等价性和永真蕴含 3、置换与合一 三、自然演绎推理 四、归结演绎推理 1、子句型 2、鲁滨逊归结原理 3、归结策略 一、确定性推理 推理:就是按照某种策略从已有事…

微机原理与接口技术 学习笔记(二) 存储器

文章目录 一,存储器1.1 概述1.1.1 半导体存储器的分类按制造工艺: 易失性或挥发性存储器 / 不易失性或不挥发性存储器按制造工艺: 1.1.2 半导体存储器的性能指标1.1.3 半导体存储器的一般结构及组成 1.2 随机存取存储器 RAM1.2.1 静态RAM1.2.…

操作符和表达式求值

目录 1.运算符的优先级和结合性 1.1运算符的优先级 1.2结合性 2.操作符的使用最终带来的是一个表达式的值 2.1.隐式类型转换(整型提升) 2.1.1整形提升的例子 2.2算术转换 1.运算符的优先级和结合性 运算符是编程语言中的基本元素之一,主…

临床试验三原则-对照、重复、随机

临床试验必须遵循三个基本原则:对照、重复、随机。 一、对照原则和对照的设置 核心观点:有比较才有鉴别。 对照组和试验组同质可比。 三臂试验 安慰剂:试验组:阳性对照组1:n:m(n≥m&#xff…

论文略读:城市道路场景下车辆编队运动规划与控制算法研究

1. 一些观点: (1)我曾经认为不能复现的论文都是垃圾。我现在看到能够量产的论文之后发现,论文的复现实属难得,即使给你代码,反复钻研,一个月之久才敢说略微看懂,所以论文的复现实在是…

使用 `tailwindcss-patch@2` 来提取你的类名吧

使用 tailwindcss-patch2 来提取你的类名吧 使用 tailwindcss-patch2 来提取你的类名吧 安装使用方式 命令行 Cli 开始提取吧 Nodejs API 的方式来使用 配置 初始化 What’s next? tailwindcss-patch 是一个 tailwindcss 生态的扩展项目。也是 tailwindcss-mangle 项目重要…

高等数学教材重难点题型总结(二)导数与微分

本章重点题目较少,除了*标题页没什么特别难的,本帖出于总结性的角度考虑并未囊概全部的*标,最后会出一期*标题的全部内容整理,在攻克重难点的基础上更上一层楼。 1.根据定义求某点处的导数值 2.通过定义证明导数 3.左右导数的相关…

QT使用QML实现地图绘制虚线

QML提供了MapPolyline用于在地图上绘制线段,该线段是实线,因此我使用Canvas自定义绘制的方式在地图上绘制线段,如图: 鼠标在地图上点击后,在点击位置添加图标 ,当有多个图标被添加到地图上后,计…

openGauss学习笔记-40 openGauss 高级数据管理-锁

文章目录 openGauss学习笔记-40 openGauss 高级数据管理-锁40.1 语法格式40.2 参数说明40.3 示例 openGauss学习笔记-40 openGauss 高级数据管理-锁 如果需要保持数据库数据的一致性,可以使用LOCK TABLE来阻止其他用户修改表。 例如,一个应用需要保证表…

MTK Android非常用分辨率修改充电动画

非标准分辨率的屏,配置MTK Android的关机充电动画. 环境 芯片 MTK 系统 Android 服务器 ubuntu 屏幕分辨率356*400,不是常见的分辨率. 原始充电动画显示异常,画面扭曲. 方法 确定使用的图片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo 这个目录下…

05-基础入门-系统及数据库等

基础入门-系统及数据库等 一、操作系统层面1、识别操作系统常见方法2、简要两者区别及识别意义3、操作系统层面漏洞类型对应意义4、简要操作系统层面漏洞影响范围 二、数据库层面1、识别数据库类型常见方法2、数据库类型区别及识别意义3、数据库常见漏洞类型及攻击4、简要数据库…

【【STM32之GPIO】】

STM32之GPIO 学完了正点原子自带的视频课之后感觉仍然一知半解现在更新一下来自其他版本的STM32学习 GPIO 就是 General Purpose Input Output 中文名叫通用输入输出口 可配置8种输入输出模式 引脚电平 0V~3.3V 部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff…

MongoDB增删改查操作

数据库操作&#xff1a; 在MongoDB中&#xff0c;文档集合存在数据库中。 要选择使用的数据库&#xff0c;请在mongo shell程序中发出 use <db> 语句 // 查看有哪些数据库 show dbs;// 如果数据库不存在&#xff0c;则创建并切换到该数据库&#xff0c;存在则直接切换到…

CS5263 DP转HDMI 4k@60Hz转接线方案,替代IT6563 PS176方案

集睿致远/ASL推出的CS5263是一款DP转HDMI 2.0音视频转换芯片&#xff0c;主要用于设计DP转HDMI2.0音视频转换器或者DP转HDMI 4K60Hz音视频转接线等产品种适用于需要视频协议转换的电缆适配器、电视接收器、监视器和其他应用。 CS5263参数 DisplayPort输入&#xff08;接收器&a…

电脑如何快速查看系统中的驱动是否安装

第一步&#xff1a;winR 打开运行命令窗口 第二步输入&#xff1a;在打开输入框中输入driverquery&#xff0c;点击确定或按下回车键&#xff0c;命令行页面列出本机相关驱动信息。 1、driverquery 驱动查询 2、driverquery /V 驱动程序查询/ V

在 React+Typescript 项目环境中创建并使用组件

上文 ReactTypescript清理项目环境 我们将自己创建的项目环境 好好清理了一下 下面 我们来看组件的创建 组件化在这种数据响应式开发中肯定是非常重要的。 我们现在src下创建一个文件夹 叫 components 就用他专门来处理组件业务 然后 我们在下面创建一个 hello.tsx 注意 是t…

多智能体共识算法的粗略数学证明

这篇文章是对论文《Consensus and Cooperation in Networked Multi-Agent Systems》中定理一的粗略数学证明。 论文中的定理一&#xff1a; 对一个由 n 个智能体以拓扑结构 G 组成的网络&#xff0c;使用以下共识算法&#xff1a; x ˙ i ( t ) Σ j ∈ N i a i j ( x j ( t…

客户标签如何分类?

客户标签分为8大类标签 &#x1f449;客户画像类标签记录客户的基础信息&#xff01; &#x1f449;客户来源类标签记录获客途径及渠道效果&#xff01; &#x1f449;客户状态类标签描述客户的全生命周期&#xff01; &#x1f449;客户跟进类标签记录与客户链接以后的情况&am…