PostgreSQL 数据库设计与管理(四)

1. 数据库设计原则

1.1 规范化

规范化是组织数据库结构的一种方法,旨在减少数据冗余并提高数据完整性。常用的规范化范式包括:

  • 第一范式(1NF): 确保每列都是原子的,不可再分。
  • 第二范式(2NF): 满足1NF,且每个非主属性完全依赖于主键。
  • 第三范式(3NF): 满足2NF,且每个非主属性不传递依赖于主键。

1.2 反规范化

在某些情况下,出于性能考虑,可以进行反规范化。反规范化是适当地引入冗余数据,以减少查询时的联接操作,从而提高性能。

1.3 实体关系模型(ER模型)

ER模型用于描述数据和数据之间的关系。它包括实体(如用户、订单)、属性(如用户名、订单金额)和关系(如用户与订单之间的一对多关系)。

1.4 数据完整性

数据完整性是指数据库中数据的准确性和一致性。常见的数据完整性约束包括:

  • 实体完整性: 每个表都有主键,且主键唯一且不为空。
  • 参照完整性: 外键约束,确保引用的记录在外键表中存在。
  • 域完整性: 限制列中的数据类型和取值范围。

2. 数据库管理

2.1 事务与并发控制

事务是一个或多个SQL操作的集合,具有以下四个特性(ACID):

  • 原子性(Atomicity): 事务要么全部执行,要么全部回滚。
  • 一致性(Consistency): 事务执行前后,数据库保持一致性状态。
  • 隔离性(Isolation): 各事务之间相互隔离,互不影响。
  • 持久性(Durability): 事务一旦提交,数据将永久保存。

PostgreSQL 使用多版本并发控制(MVCC)来实现高效的并发控制。

2.2 备份与恢复

备份是保护数据免受损失的重要手段。PostgreSQL 提供了多种备份和恢复方法:

2.2.1 逻辑备份

使用 pg_dump 工具进行逻辑备份:

pg_dump dbname > dbname_backup.sql

恢复逻辑备份:

psql dbname < dbname_backup.sql
2.2.2 物理备份

使用 pg_basebackup 工具进行物理备份:

pg_basebackup -D /path/to/backupdir -Fp -Xs -P

恢复物理备份涉及到将备份文件复制回数据目录,并启动数据库。

2.3 安全管理

确保数据库的安全性非常重要。以下是一些常见的安全管理措施:

2.3.1 用户和权限管理

创建用户和角色:

CREATE ROLE readaccess;
CREATE USER alice WITH PASSWORD 'password';
GRANT readaccess TO alice;

授予权限:

GRANT SELECT ON TABLE users TO readaccess;
2.3.2 数据加密

PostgreSQL 支持 TLS/SSL 加密通信。配置SSL证书以启用加密:

编辑 postgresql.conf 文件,设置 ssl = on

ssl = on

配置 pg_hba.conf 文件,启用加密连接:

hostssl all all 0.0.0.0/0 md5
2.3.3 审计和日志

配置审计日志记录用户活动和SQL查询。使用 pgaudit 扩展来实现审计功能:

安装 pgaudit

CREATE EXTENSION pgaudit;

配置审计选项:

pgaudit.log = 'all'

3. 实战演练

3.1 练习题目

  1. 设计一个图书管理系统,包括以下实体:

    • 用户(idusernameemail
    • 图书(idtitleauthorpublished_date
    • 借阅记录(iduser_idbook_idborrow_datereturn_date
  2. 为上述系统定义外键约束,以确保数据完整性。

  3. 实现用户借阅图书的事务操作,确保数据一致性。

  4. 配置数据库用户权限,使得普通用户只能查询图书信息,而管理员可以执行所有操作。

3.2 示例答案

  1. 设计图书管理系统:
CREATE TABLE users (id SERIAL PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL
);CREATE TABLE books (id SERIAL PRIMARY KEY,title VARCHAR(100) NOT NULL,author VARCHAR(100) NOT NULL,published_date DATE
);CREATE TABLE borrow_records (id SERIAL PRIMARY KEY,user_id INTEGER REFERENCES users(id),book_id INTEGER REFERENCES books(id),borrow_date DATE NOT NULL,return_date DATE
);
  1. 定义外键约束(已在上面的表定义中体现)。

  2. 用户借阅图书的事务操作:

BEGIN;INSERT INTO borrow_records (user_id, book_id, borrow_date)
VALUES (1, 2, CURRENT_DATE);UPDATE books
SET status = 'borrowed'
WHERE id = 2;COMMIT;
  1. 配置数据库用户权限:

创建角色和用户:

CREATE ROLE librarian;
CREATE ROLE member;
CREATE USER admin WITH PASSWORD 'adminpassword';
CREATE USER user1 WITH PASSWORD 'userpassword';GRANT librarian TO admin;
GRANT member TO user1;

授予权限:

GRANT SELECT ON TABLE books TO member;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO librarian;

系统文章目录:

PostgreSQL 简介与基础(一)

PostgreSQL 基本SQL语法(二)

PostgreSQL 高级SQL查询(三)

PostgreSQL 数据库设计与管理(四)

PostgreSQL 高级功能(五)

PostgreSQL 性能优化与调优(六)

PostgreSQL 高可用性与灾难恢复策略(七)

PostgreSQL 安全性与权限管理(八)

PostgreSQL 高级功能与扩展(九)

PostgreSQL 分区表与并行查询(十)

PostgreSQL 索引优化与性能调优(十一)

PostgreSQL 日志管理与故障排查(十二)

PostgreSQL 高可用性与容错性(十三)

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

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

相关文章

领先Intel 旗舰60%,AMD锐龙9000系桌面CPU彻底杀疯了

早在月初台北国际电脑展上&#xff0c;Intel 公布了下一代低功耗移动端处理器 Lunar Lake。 也就是第二代移动版酷睿 Ultra。 而作为叫板王&#xff0c;AMD 丝毫不怂&#xff0c;不但掏出了 Ryzen AI 300 移动端处理器应对。 还抢在 Intel 之前带来了全新一代 Zen 5 架构 Ryz…

前端vue项目升级nodejs后无法运行了

问题描述&#xff1a; 运行、打包都正常的vue项目&#xff0c;在将nodejs升级到v20.14.0后&#xff0c;均报错了&#xff1a; Error: error:0308010C:digital envelope routines::unsupported opensslErrorStack: [ error:03000086:digital envelope routines::initializ…

制造业如何拥抱数字化?百数服务商的转型策略与实践

制造业作为实体经济的主体部分&#xff0c;也是核心部分&#xff0c;发挥着基础性、主导性和引领性作用。推动制造业数字化转型是实现经济高质量发展的必由之路。 在这场数字化浪潮中&#xff0c;低代码平台作为一种新兴的技术手段&#xff0c;逐渐受到了企业的青睐。其能够在…

[5]python+selenium - UI自动框架之重写unittest.TestCase

重写unittest.TestCase 不仅继承了unittest的方法&#xff0c;还丰富不同断言方法&#xff0c;用起来更方便、简单。 import unittest from common.BSBase import BasePage from common.log import log from common.browserDriver import getdriver from common.publicFunc imp…

2024.06.30 刷题日记

121. 买卖股票的最佳时机 实例 1&#xff1a; 输入&#xff1a;[7,1,5,3,6,4] 输出&#xff1a;5 解释&#xff1a;在第 2 天&#xff08;股票价格 1&#xff09;的时候买入&#xff0c;在第 5 天&#xff08;股票价格 6&#xff09;的时候卖出&#xff0c;最大利润 6-1 5…

高考假期预习指南:开启你的IT学习之旅

七月来临&#xff0c;各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束&#xff0c;而是新旅程的开始。对于有志于踏入IT领域的高考少年们&#xff0c;这个假期是开启探索IT世界的绝佳时机。作为一名在计算机行业深耕多年的专家&#xff0c;我愿意为准新生们提供一份…

等级保护测评在测评中Linux系统怎么改

在等级保护测评中&#xff0c;针对Linux系统的整改主要是为了提高其安全性&#xff0c;使之符合等级保护的基本要求。 以下是一些常见的整改步骤和建议&#xff1a; 1. 身份鉴别&#xff1a; • 强化密码策略&#xff0c;例如设置复杂的密码规则、密码长度、密码复杂度、密码…

Web基础与HTTP协议:

Web基础与HTTP协议 Web&#xff1a;就是我们所说的页面&#xff0c;打开网站所展示的页面。&#xff08;全球广域网&#xff0c;万维网&#xff09; 分布式图形信息系统。 http https &#xff08;加密的&#xff09;超文本传输协议 分布式&#xff1a;计算机系统或者应用程序…

大型游乐设施操作试题

选择题 1、《游乐设施安全技术监察规程(试行)》规定:制造单位应在游乐设施明显部位装设铭牌&#xff0c;铭牌内容至少应包括制造单位名称与地址、设备名称、编号等等技术参数&#xff0c;但下列除哪项外均正确。[单选题]* A、速度和高度 B、生产许可证号 C、制造单位的联系电话…

WLAN Hostapd配置参数详解 - EN

中文的配置参数详解&#xff1a;WLAN Hostapd配置参数详解-CSDN博客 ##### hostapd configuration file ############################################## # Empty lines and lines starting with # are ignored # AP netdevice name (without ap postfix, i.e., wlan0 uses wl…

vue3引入本地静态资源图片

一、单张图片引入 import imgXX from /assets/images/xx.png二、多张图片引入 说明&#xff1a;import.meta.url 是一个 ESM 的原生功能&#xff0c;会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用 注意&#xff1a;填写自己项目图片存放的路径 /** vite的特殊性…

SQL注入【1】——通用漏洞/SQL注入/mysql跨库/ACCESS偏移

一、知识点: 1、脚本代码与数据库前置知识 2、Access数据库注入-简易&偏移 3、MYSQL数据库注入-简易:权限跨库 二、前置知识: &#xff08;一&#xff09;SQL注入漏洞产生原理分析 SQL注入产生条件&#xff1a;根本条件&#xff1a;可控变量、特定函数。 脚本代码在实现…

教育行业的网络安全:保护学生数据与防范网络欺凌

在数字化的春风中&#xff0c;教育行业迎来了知识的繁花似锦&#xff0c;然而&#xff0c;随之而来的网络安全风暴也悄然逼近。学生数据的脆弱性与网络欺凌的阴影交织成一幅复杂的画卷&#xff0c;呼唤着教育工作者与技术专家共同编织一张密不透风的网络安全之网。本文深入探讨…

C++修饰符类型

一、存储类运算符 auto&#xff08;自动存储类&#xff0c;但在现代C中&#xff0c;它通常用于自动类型推导&#xff09; register&#xff08;建议编译器将变量存储在寄存器中&#xff0c;但现代编译器通常忽略此关键字&#xff09; static&#xff08;静态存储类&#xff…

【Spring】Spring Security 核心类介绍及Spring Security 的验证机制

Spring Security 核心类介绍及Spring Security 的验证机制 一、Spring Security 核心类1.1 Authentication1.2 SecurityContextHolder1.3 UserDetails1.4 UserDetailsService1.5 GrantedAuthority1.6 DaoAuthenticationProvider1.7 PasswordEncoder 二、 Spring Security 的验证…

国产压缩包工具——JlmPackCore SDK说明(二)——JlmPack_Create函数说明

一、JlmPack_Create函数说明 JlmPack_Create函数是创建jlm压缩文件的核心函数&#xff0c;最大允许CATALOG_MAX_LIMIT&#xff08;请参考Config.h&#xff09;个目录&#xff0c;意思是包括文件夹和文件在内&#xff0c;遍历整个列表最大允许CATALOG_MAX_LIMIT个目录对象&#…

《昇思25天学习打卡营第4天|数据集 Dataset》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 数据集加载2. 数据集迭代3. 数据集常用操作与自定义数据集 前言&#xff1a; 今天学习的是数据集的内容。首先&#xff0c;数据是深度学习的基石&#xff0c;高质量的数据输入能够在整个深度神经网络中发挥积极作用。MindSpo…

【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体

目录 步骤 一、通过笔刷创建静态网格体 二、破裂静态网格体 三、“统一” 多层级破裂 四、“簇” 群集化的破裂 五、几何体集的材质 六、防止几何体集自动破碎 步骤 一、通过笔刷创建静态网格体 1. 可以在Quixel Bridge中下载两个纹理&#xff0c;用于表示石块的内外纹…

C++中的类型转换操作符:static_cast reinterpret_cast const_cast dynamic_cast

目录​​​​​​​ C语言中的类型转换 C中的类型转换 C中的类型转换操作符 static_cast reinterpret_cast const_cast volatile关键字 赋值兼容 dynamic_cast C语言中的类型转换 基本概念&#xff1a;赋值运算符左右两侧类型不同&#xff0c;或形参与实参类型不匹配…