逻辑数据库设计有多种实现方式包括自顶至底自底至顶以及混合方式。传统数据库设计是一个自底至顶的过程从分析需求中的单个数据元素开始把相关多个数据元素组合在一起转化为数据库中的表。这种方式较难应对复杂的大型数据库设计这就需要结合自顶至底的设计方式。使用ER模型进行概念数据建模方便了项目团队内部及与最终用户之间的交流与沟通。ER建模的高效性还体现在它是一种自顶至底的设计方法。一个数据库中的实体数量比数据元素少很多因为大部分数据元素表示的是属性。辨别实体并关注实体之间的关系能大大减少需要分析的对象数量。概念数据建模连接了两端一端是需求分析其能辅助捕获需求中的实体及之间的关系便于人们的交流。另一端是关系型数据库模型可以很容易的转化为范式化或接近范式化的SQL表。概念数据建模步骤让我们进一步仔细观察应在需求分析和概念设计阶段定义的基本数据元素和关系。一般需求分析与概念设计是同步完成的。使用ER模型进行概念设计的步骤包括辨识实体与属性识别泛化层次结构定义关系下面我们对这三个步骤一一进行讨论。辨识实体与属性实体和属性的概念及ER构图都很简单但要在需求中区分实体和属性不是一件易事。例如需求描述中有句话“项目地址位于某个城市”。这句话中的城市是一个实体还是一个属性呢又如每一名员工有一份简历。这里的简历是一个实体还是一个属性呢辨别实体与属性可参考如下准则实体应包含描述性信息多值属性应作为实体来处理属性应附着在其直接描述的实体上这些准则能引导开发人员得到符合范式的关系数据库设计。如何理解上述的三条准则呢实体内容实体应包含描述信息。如果一个数据元素有描述型信息该数据元素应被识别为实体。如果一个数据元素只有一个标识名则其应被识别为属性。以前面的“城市”为例如果对于“城市”有一些如所属国家、人口等描述信息则“城市”应被识别为一个实体。如果需求中的“城市”只表示一个城市名则把“城市”作为属性附属与其他实体如附属Project实体。这一准则的例外是当值的标识是可枚举的有限集时应作为实体来处理。例如把系统中有效的国家集合定义为实体。在现实世界中作为实体看待的数据元素有EmployeeTaskProjectDepartmentCustomer等。多值属性把多值属性作为实体。如果一个实例的某个描述符包含多个对应值则即使该描述符没有自己的描述信息也应作为实体进行建模。例如一个人会有许多爱好如看电影、打游戏、大篮球等。爱好对于一个人来说就是多值属性则爱好应作为实体来看待。属性依附把属性附加在其最直接描述的实体上。例如“office-building-name”作为“Department”属性比作为“Employee”的属性合适。识别实体与属性并把属性附加到实体中是一个循环迭代的过程。识别泛化层次如果实体之间有泛化层次关系则把标识符和公共的描述符属性放在超类实体中把相同的标识符和特有的描述符放在子类实体中。举例来说在ER模型中有5个实体分别是Employee、Manager、Engineer、Technician、Secretary。其中Employee可以作为Manager、Engineer、Technician、Secretary的超类实体。我们可以把标识符empno公共描述符empname、address、date-of-birth放在超类实体中。子类实体Manager中放empno特有描述符jobtitle。Engineer实体中放empno特有描述符jobtitlehighest-degree等。定义关系在识别实体和属性之后我们可以处理代表实体之间联系的数据元素即关系。关系在需求描述中一般是一些动词如works-in、works-for、purchases、drives这些动词联系了不同的实体。对于任何关系需要明确以下几个方面。关系的度二元、三元等关系的连通数一对一、一对多等关系是强制的还是可选的关系本身有些什么属性。注关系的这些概念可参看数据库设计 Step by Step (3)这里不再赘述。冗余关系仔细分析冗余的关系。描述同一概念的两个或多个关系被认为是冗余的。当把ER模型转化为关系数据库中的表时冗余的关系可能造成非范式化的表。需要注意的是两个实体间允许两个或更多关系的存在只要这些关系具有不同的含义。在这种情况下这些关系不是冗余的。举例来说如下图1中Employee生活的City与该Employee所属的Professional-association的所在City可以不同两种含义故关系lives-in非冗余。图1 非冗余关系如下图2中的Employee工作的City与该Employee参与的Project的所在City在任何情况下都一致同种含义故关系works-in冗余。图2 传递性冗余关系三元关系非常小心的定义三元关系只有当使用多个二元关系也无法充分描述多个实体间的语义时我们才会定义三元关系。以Technician、Project、Notebook为例。例1如果 一个Technician只做一个Project一个Project只有一个Technician每个Project会被独立记录在一本Notebook中。图3 例1二元关系图例2如果一个Technician能同时做多个Project一个Project可以有多个Technician同时参与每个Project有一本Notebook多个做同一个Project的Technician共用一本Notebook。图4 例2二元关系图例3如果一个Technician能同时做多个Project一个Project可以有多个Technician同时参与一个Technician在一个Project中使用独立的一本Notebook。图5 例3三元关系图注三元关系的语义分析可参看数据库设计 Step by Step (4)这里不再赘述。我们假设要为一家工程项目公司设计一个数据库来跟踪所有的全职员工包括员工被分配的项目所拥有的技能所在的部门和事业部所属于的专业协会被分配的电脑。单个视图的ER建模通过需求收集与分析过程我们获得了数据库的3个视图。第一个视图是人力资源管理视图。每一个员工属于一个部门。事业部是公司的基本单元每个事业部包含多个部门。每一个部门和事业部都有一个经理我们需要跟踪每一个经理。这一视图的ER模型如图6所示。图6 人力资源关系视图第二个视图定义了每个员工的头衔如工程师、技术员、秘书、经理等。工程师一般属于某个专业协会并可能被分配一台工作站。秘书和经理会被分配台式电脑。公司会储备一些台式电脑和工作站以分配给新员工或当员工的电脑送修时进行出借。员工之间可能有夫妻关系这也需要在系统中进行跟踪以防止夫妻员工之间有直接领导关系。这一视图的ER模型如图7所示。图7 员工头衔及电脑分配视图第三个视图如图8所示包含员工工程师、技术员分配项目的信息。员工可以同时参与多个项目每一个项目可以在不同的地方城市设有总部。但一个员工在指定的地点只能做当地的一个项目。员工在不同的项目中可以选用不同的技能。图8 项目分配及技能
【OpenHarmony/HarmonyOs 】零敏感权限启动:从 module 配置到 AI 识图禁用的精细化权限方案 【OpenHarmony/HarmonyOs 】零敏感权限启动:从 module 配置到 AI 识图禁用的精细化权限方案本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。项目当前没有相机、相册、麦克风、定位、通讯录、网络请求和 AI 识图调用,核心体验全…
AutoUnipus:2025终极版U校园智能刷课神器,彻底解放你的学习时间 AutoUnipus:2025终极版U校园智能刷课神器,彻底解放你的学习时间 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台繁重的网课任务而烦恼吗&…
成都知名的中央空调公司有哪些 痛点深度剖析我们团队在实践中发现,中央空调在使用过程中存在诸多痛点。从产品层面看,气候适配性差是常见问题,很多中央空调在潮湿地区除湿能力弱,夏季室内闷热易结露,还会过度制冷导致体感不舒适;温控方面…
Voron 2.4终极构建指南:从开源设计到工业级打印体验的完整蜕变 Voron 2.4终极构建指南:从开源设计到工业级打印体验的完整蜕变 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 你是否曾梦想拥有一台能够完美平衡速度、精度和可靠性的3D打印机࿱…
如何在10分钟内搭建专属原神私服:KCN-GenshinServer完整指南 如何在10分钟内搭建专属原神私服:KCN-GenshinServer完整指南 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 想要拥有一个完全由你掌控的提瓦特大陆吗ÿ…
openLCA:免费开源的碳足迹与生命周期评估终极指南 openLCA:免费开源的碳足迹与生命周期评估终极指南 【免费下载链接】olca-app Source code of openLCA 项目地址: https://gitcode.com/gh_mirrors/ol/olca-app 面对日益严格的环保法规和ESG信息披露要求,企业如何以零成本实现专业的碳足迹分析&am…
5分钟掌握STL转STEP:免费开源格式转换解决方案 5分钟掌握STL转STEP:免费开源格式转换解决方案 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在数字化设计和制造领域,STL格式转换到STEP格式是许多工程师和设计师面临…
3分钟完成:Honey Select 2完整汉化与功能增强终极指南 3分钟完成:Honey Select 2完整汉化与功能增强终极指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面困扰吗&#…
终极bypy多账户管理方案:告别切换烦恼的高效工作流 终极bypy多账户管理方案:告别切换烦恼的高效工作流 【免费下载链接】bypy Python client for Baidu Yun (Personal Cloud Storage) 百度云/百度网盘Python客户端 项目地址: https://gitcode.com/gh_mirrors/by/bypy bypy作为百度云/百度网盘的Python客户端&a…
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复 如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…
企业AI落地困境与AgenticOps实践指南 1. 企业AI落地的现实困境与破局之道过去两年,大模型技术呈现爆发式增长,从GPT-3到GPT-4,从LLaMA到DeepSeek,模型参数规模从百亿级跃升至万亿级,多模态能力从单一文本扩展到图文音视频的综合处理。然而在企业应用层面&a…
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复 如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…
企业AI落地困境与AgenticOps实践指南 1. 企业AI落地的现实困境与破局之道过去两年,大模型技术呈现爆发式增长,从GPT-3到GPT-4,从LLaMA到DeepSeek,模型参数规模从百亿级跃升至万亿级,多模态能力从单一文本扩展到图文音视频的综合处理。然而在企业应用层面&a…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…