当前位置: 首页 > news >正文

从实体和关系角度看 PowerDesigner 设计数据库模型

从实体和关系角度看 PowerDesigner 设计数据库模型

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


还是从主体和关系出发,我们进行数据库建模。

和面向对象的 UML 建模有类似之处,只不过数据库建模是表间关联及最小范畴的界定。

当然五个泛式在数据库设计过程中的指导作用是不可或缺的,然而,如果你真的完全遵照五个范式设计出了数据库模型,那么你的设计本身就失败了!

因为那个结果一定是不太好用的,趋于极致的往往就是不合常理的。


适当的冗余,对于时间与空间的权衡,才是真正的数据库设计所遵循的至上法则,这其中无不时刻涉及实际业务环境因素,因地置宜,因时不同,因人而异!


马列矛盾理论告诉我们:数据库设计就是‘主体’和‘关系’的设计

这一篇中传达了主体和关系的概念。


在我所涉及到的数据库设计工具中,最喜欢 MySql WorkBench,其次是 ERWin,最后才是 PowerDesigner。

而 ERWin 当年就很难下到,现在下到了,居然没有 SQLSERVER2000的 DBLib 无法连接 SQLSERVER2008,这真有点扯了,那也是没办法的事情,有空儿再试试。


目前只能求其次,用 PowerDesigner 了。

相对 MySQL WorkBench 来讲,表的自增长 id,还是 MySQL WorkBench 做得好些,每个表都是 id,插入其它表做外键时,自动将表名加在 id 前。


即然开始用 PowerDesigner 了,那么就看看它的好吧,一步一步来做设计。


首先,我们得了解 PowerDesigner  中有概念模型、逻辑模型和物理模型,可以在概念模型中设计,并逐步生成后续两者,再由物理模型生成建库脚本或直接创建库。

反过来,从现有数据库反向生成物理模型,也是可以的。


  


上面 PowerDesigner  中表的设计,Name 和 Code 暂时都使用英文,因为我还不知道 Name 用中文,最后生成的数据库如何用 Code 中的英文。

这里的 Convert name into codes 选项勾后,也不起作用,不知是何原因。有了解的朋友,敬请指教。


从上面看出,表名 student ,自增长 id 也得加上表名 student_id,主要是这个名字全局唯一,所以都用 id 就会冲突。


下面 school 和 student 两表的关系是依赖关系,即学生因上了某所学校而称之为学生。

但实际用时,为了降低约束,不让 school_id 在 student 表中作为主键,那么 Dependent 不勾选,Mandatory 表示强制,即一个学生必须有一个学校,而学校至少有一个学生,下图中默认允许学校没学生了,新开张的吧偷笑


上面这种关系线,是一对多的关系,线即代表外键,在逻辑图和物理图中会生成这个外键 。

另一种是,一条关系线代表一种多对多的关系,会转换成一张表。


多出一张 relationship_2 的表,其中关联的两张表的主键形成了复合主键。


最终,核心在于考虑好表间的关系,这才是主要的,至于这个工具如何用,那都是其次了。




相关文章:

  • 基础知识__WebService
  • Lepus经历收获杂谈(二)——QT
  • Python Function Note
  • 腾讯下一个重点:硬件;硬件自身的未来也正进入多元化发展
  • REST架构的思考
  • python的统一编码规范
  • c# 反射
  • 使用AutoCompleteTextView和AsyncTask 检索城市
  • python之路(二)函数
  • Linux下设置定期执行脚本
  • Linux下安装配置MongoDB数据库
  • Zabbix服务器端安装过程(含centos 7.1安装 zabbix3.0.8的故障排除)
  • 数学之路-python计算实战(2)-初遇pypy
  • linux --vsftpd虚拟用户登录时 530 Login incorrect排错
  • 昨天要成为反弹一日游?关键看下午了
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 10个确保微服务与容器安全的最佳实践
  • Angularjs之国际化
  • css选择器
  • ES6之路之模块详解
  • JavaScript设计模式与开发实践系列之策略模式
  • JS变量作用域
  • learning koa2.x
  • LeetCode算法系列_0891_子序列宽度之和
  • MySQL用户中的%到底包不包括localhost?
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SpringCloud集成分布式事务LCN (一)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 对象管理器(defineProperty)学习笔记
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 构建工具 - 收藏集 - 掘金
  • 简析gRPC client 连接管理
  • 前端攻城师
  • 前端技术周刊 2019-02-11 Serverless
  • 微服务核心架构梳理
  • 小而合理的前端理论:rscss和rsjs
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 阿里云移动端播放器高级功能介绍
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #13 yum、编译安装与sed命令的使用
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)插入排序
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • ***通过什么方式***网吧
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .Net语言中的StringBuilder:入门到精通
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • 。Net下Windows服务程序开发疑惑
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [bzoj1901]: Zju2112 Dynamic Rankings