数据库逻辑结构设计

逻辑结构设计核心任务是将概念模型(通常是E-R图)转换为具体的数据库管理系统(DBMS)支持的数据模型(如关系模型),并对其进行优化。

一、 主要任务与目标

转换模型:将概念模型(E-R图)转换为关系模型(即一系列的关系模式/表)。

规范化处理:运用规范化理论(如范式)对关系模式进行优化,消除数据冗余和操作异常。

用户视图设计:设计外模式(用户视图),满足不同用户对数据的不同需求,并提高数据的安全性。

完整性约束设计:定义主键、外键、唯一性约束、检查约束等,保证数据的正确性和一致性。

二、 设计步骤

1. 概念模型向关系模型的转换

总体原则:实体转换为关系模式,实体的属性为关系的属性,实体的码为关系的键。

联系的处理:一个联系转换为一个关系模式,有三种情况:

如果联系为1:1 ,则每个实体的码都是关系的键;

如果联系为1:n ,则n端实体的码是关系的键;

如果联系为n:m ,则各实体码的组合是关系的键。

2. 关系模式的规范化

将转换后的关系模式进行规范化分析,通常要求达到第三范式(3NF),有时为了性能会适当反规范化。

  • 1NF:属性不可再分。

  • 2NF:消除非主属性对码的部分函数依赖。

  • 3NF:消除非主属性对码的传递函数依赖。

  • BCNF:消除主属性对码的部分和传递函数依赖。

3. 用户子模式(外模式)设计

根据局部应用需求,设计用户视图。这包括:

  • 使用更符合用户习惯的别名。

  • 针对不同用户定义不同的视图。

  • 简化用户对数据的查询操作。

4. 完整性约束设计
  • 实体完整性:定义主键(Primary Key)。

  • 参照完整性:定义外键(Foreign Key)及级联操作(CASCADE, SET NULL等)。

  • 用户定义完整性:定义CHECK约束、NOT NULL、DEFAULT等。

三、示例

学生(++学号++,姓名,性别,年龄,系编号)

课程(++课程号++,课程名)

教师(++教师号++,姓名,性别,职称,系编号)

系(++系编号++,系名,电话)

讲授(++教师号,课程号++)

选修(++学号,课程号++,成绩)

主键用下划线,外键用波浪线

相关推荐
OceanRoy5 小时前
数据库表的设计
数据库·内连接·外连接·er图·表的约束·三大范式·多表连接
Pniubi6 小时前
怎么排查慢SQL,怎么解决?
java·数据库·sql
Decay__10 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
茶栀(*´I`*)10 小时前
SQL 性能分析:从慢查询日志到执行计划的完整定位方法
数据库·sql
艺杯羹11 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
code2cat12 小时前
【随笔】MCP工具重试:任务已经创建,响应丢了怎么办
数据库·mcp
wuyk55513 小时前
Spider-第10讲-SQLite持久化与去重
数据库·爬虫·sqlite
乌暮15 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
小此方16 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
flash俊杰17 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构