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

MySql 官方工具 WorkBench 设计数据库要点分析

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

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

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

巧妇难为无米之炊,研究这些内容,我们得先有 MySql 和 WorkBench,下面就在 www.gfsoso.com 搜一下 mysql 关键字吧!

第一项就是

MySQL :: MySQL Community Downloads

幸好 MySql 落入 Oracle 的怀抱之后,还能一如即往地弄个社区版,这也看得出社区对开源的贡献力量有多么大。

废话不多说,下面贴出来 MySql 和 WorkBench 的下载链接,当然了,还是得继续点下去的,要有心理准备噢,很慢很慢地:

  • MySQL Community Server (GPL)
    (Current Generally Available Release: 5.6.21)MySQL Community Server is the world's most popular open source database.DOWNLOAD
  • MySQL Workbench (GPL)
    (Current Generally Available Release: 6.2.4)MySQL Workbench is a next-generation visual database design application that can be used to efficiently design, manage and document database schemata. It is available as both, open source and commercial editions.DOWNLOAD

晚上休息时待续。。。

MySql 的搜狐镜像站:

http://mirrors.sohu.com/mysql/

Android 的东软镜像站:

http://mirrors.neusoft.edu.cn/android/repository/

这个镜像站是从 这里 翻出来的,一个一个地翻的确费了不少事儿。

由此也明白了东软镜像代理的来由:

你可以把 mirrors.neusoft.edu.cn 作为代理,指定给 Android SDK Manager 的代理,那下载速度就可想而知了,不信那就试试:

好像没有办公室快,4M 联通宽带要 22分钟更新完 4.4.2 的 SDK 包,办公室的电信光纤,早上没上班时,更新同样的 SDK 只需要不到 10 分钟。

---------------------

以下一大堆图,还没来得及整理,大致过程中截到的图都有了

可以这么说,数据库设计与数据库管理是两个层次上的事儿,

知道咋建表,但并不一定知道咋设计,如有哪些字段、主键、外键、索引等等,这些都要考虑实际业务需求。

不过,总结起来,数据库设计就涉及到两个对象:

1、实体对象,如人、商店、货车;

2、关系对象,如人顾了货车拉货,这是一个顾佣关系;人从商店买东西,这是一个买卖关系;货车给商店送化,这是一个服务关系;

                        如人有档案,档案其实是一个实体,但它属于某个人,这种关系,不体现在表,而是一个外键字段的增加;

关系对象又分为:静态依存关系与动态作用关系;

静态依存关系,如学生档案,依存于学生存在;

动态作用关系,如顾客买商店的东西;

有些可以是静态关系,也可以是动态关系,比如,学生上学,学生属于这个学校,是一种静态关系,而学生到这所学校就读,算是一种动态关系;

还有一种,就是课外学校,一个学生可以在多所课外学校学习,而一所课外学校,可以有很多学生,这是一种交叉的作用关系,而非依存关系;

                        

实体用表存储实体的特性;

关系也用表存储关系的特性,以及关系的双方的载明;

除了这些,数据库设计最主要的东西,还有什么?!可能都是边边角角不常用的了吧,即或也很重要!。。。

上面插了一段,接下来转入正题,这周末也只能写点儿这个了,至于 MyBatis 和 MyBatis-Spring 还需要进一步研究细节,以便能说得清楚,虽然已经能正常构建出可用的环境了。

Mysql Workbench 上面有镜像站,自个儿下载安装吧,无论是 Mac 版,还是 Windows 版,或者 Linux 版(好像 Unix 没人用了?!),

基本差不多,我这里以 Mac 版来描述说明:

1、新建设计模型

点按那个 New Model ,如下:

我们暂时只关于中间部分:

由以上可知,在这个 Model 当中,包含两部分内容:

1、物理方案管理(方案在 Oracle 和 Mysql 中使用,其实就是数据库,当然了,数据库和数据库实例是不同的,一个是存储,一个是存储守护进程)

      以及每个方案下的表、视图、函数、函数组、方案下用户、角色、SQL 脚本等;

2、这些表和视图等之间的关系,即 EER Diagram

      在物理方案管理中创建的表、视图等会自动带到新建的 EER Diagram 列表中,实际是一回事儿,只不过不会在 EER Diagram 图上显示,但可拖上去;

      在 EER Diagram 图上拖动建立的表等,会自动在物理方案管理中生成,其实两者都有同一个物理管理的功能;

那么为什么还要 EER Diagram 呢?

因为表是孤立的,要表明表之间的关系,光靠表中创建的外键,并不形象,那么在 EER Diagram 中拖动拖线来关联,才表示得清晰;

另外,外键不需要你手动去建,建表只需要管好自已,外键是靠建立表间关系时自动创建的。

再有,基本属性表之间建立的关联关系,其实代表着一个表,比如顾客和商店,一个顾客可能买过多个商店的物品,而一个商店可能卖给过多个顾客,

这就没办法通过简单的外键来关联了,而是两者之间产生的交易记录,这个得有一个表来存储才行。

其实,这个表也是不用建的,关系表,不是基本属性表,它是一种关系关联产生的:

中间的那个由两个标识外键组成的表,就是关系表,我并没有建它,而是通过建立关系,自动生成的。

所以说 Mysql Workbench 把这种复杂的数据库设计中的关系,简化到如此地步,可想而知,花费了多少心思,不是往大了整,而是往小了整,仅取常用的,就像 MyBatis 一样,现在简化得,我用它,都不知道是在用它,简化到了极至,而且都是常用功能,稍复杂的,都摒弃,这就是当年俺研究完 Hibernate 之后,立马放弃,自已用 SqlHelper 来操作数据库一样。当年的 iBatis 研究完之后,俺就一直在等它完善,不光是操作上,尤其是性能处理上,现在它做到了,并且取了个大名儿,登堂入室了,叫 MyBatis。

闲话不多说,回归正题,数据库设计中一定要找好两样东西,基本个体和个体间的关系。

你能造出来的表,是静态的个体表,你造不出来的是个体表间的关系,那是动态的,当产生关系后,你可以在这关系上完善一些信息,比如哪天买的,买了多少东西,付款方式,等等。至于个体之间的关系,谁主谁次,这个倒无所谓了,那是站的角度不同,把一个同样的东西看出了两样而已,我买你的东西,跟你卖给我东西,这个区别,不在特定领域,并不会有差别。

你会发现,关系表中以产生关系的个体表的主键联合起来作为主键。

有时会觉得这样用两个会显得麻烦,那么我们给关系表再建个自增加的主键。

在实做过程中,新建的 id 行会排在最后,这时你是无法设定 AL 自增加属性的,需要把它移到第一行。

而且你也会发现,每一个实体表的主键都是  id,但当通过关系加入到其它个体表,或关系表中时,自动加上了表名_id,这个很人性化吧。

时间: 2024-09-11 11:00:37

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

数据库"负载均衡,备份,异地容灾"设计

数据库"负载均衡,备份,异地容灾"设计 Author: DigoalPS - 纯属个人看法,仅供参考. 1. 数据对象按分类放到不同的SCHEMA  为了方便实施数据库层面的备份和容灾,必须将数据对象按内容进行逻辑分类设计.  例如:  (某下载系统)    1.tbl_app_info 表 - 存储应用信息,新应用部署时需要插入该表,应用下线时需要更新或删除该表的记录,用户下载时需要查询该表,还有等等一些其他操作;数据增长缓慢,数据量视应用数决定.    2.tbl_download

数据库水平切分的原理探讨、设计思路--数据库分库,分表,集群,负载均衡器

本文转载:http://www.cnblogs.com/olartan/archive/2009/12/02/1615131.html 第1章  引言 数据量巨大时,首先把多表分算到不同的DB中,然后把数据根据关键列,分布到不同的数据库中.库分布以后,系统的查询,io等操作都可以有多个机器组成的群组共同完成了.本文主要就是针对,海量数据库,进行分库.分表.负载均衡原理,进行探讨,并提出解决方案. 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每

走向ASP.NET架构设计第三章:分层设计,初涉架构(前篇)

本篇主要讲述ASP.NET应用中如何进行逻辑分层.本篇的前篇会从Smart UI 反模式和它的一些缺点开始讲述,然后一步步的讲述如何逻辑分层,而且在后篇中也会给出一个ASP.NET设计中常用的仅供参考的分层架构的Demo. 一个稳定和易维护的系统必须建立在一个好的基础之上.计划和设计一个好的架构对一个项目的成败起着至关重要的作用.可能在我们一般做项目的时候,经验告诉我们:3层,N层的设计,基本就能把问题解决了,很多的情况确实是这样的.在提出一个设计的时候,常常要考虑为什么要这样划分结构,而且常常

iOS APP体验设计:从程序猿和设计湿说起

iOS APP体验设计不像互联网的体验设计那样,有一堆的方法论和可以"借鉴"的案例. 目前除了苹果的<Human Interface Guidelines>和前Palm的<Zen of Palm>外,没有找到更好的设计哲学和方法论. 事实上,即便认真地研读了HIG和Zen of Palm,甚至是Oolon Colluphid的哲学巨作你也无法严格按照Guideline设计出一款出色的APP.其原因,得从程序猿和设计湿说起. 程序猿 vs 设计湿 最被思想处于上世

交互设计:避免针对用户出现的设计错误

一.如何理解本条内容: 一个"简单"和"复杂"的例子 在我和开发人员沟通一个项目需求的时候,他们频频慨叹Mockup的设计所考虑情况之细致,很多程序要实现的预判和"非基础功能点"让开发人员望而却步不情愿去实现.相比较设计师为了让用户避免出错而绞尽脑汁去设想和考虑,开发人员更倾向于直接给到一个只能容许的操作行为,其他非法请求全部报错:"程序是严谨的,他错,我报错,以不变应万变.简单一点不好吗?"程序员们甚至笑言:"考虑

用户体验设计:13条有关用户体验设计价值的信条

文章简介:要是我只能记住一件事我希望是用户体验的本质,设计师们和企业需要把了解甚至理解用户体验的本质当做一种专业精神,一个目标甚至说是理想. 这些我花了13年的时间去践行. 身为一名用户体验专业人士,我有职责将它发扬光大.我尝试各种能够推广它的方法--我写书,写文章,世界各地演讲, 甚至为一些公司提供内部培训或者和一些客户合作项目. 要是我只能记住一件事我希望是用户体验的本质,设计师们和企业需要把了解甚至理解用户体验的本质当做一种专业精神,一个目标甚至说是理想. 这些我花了13年的时间去践行.

Web设计核心问题3:为用户设计(9)

web|设计|问题  3.12 建设可用的站点 可用站点开发的关键在于早期就关注应用程序的用户.记住用户的目标不是使用计算机或访问站点.用户的目标是完成某个任务-购买某个物品或寻找支付账单的中心,投诉等.你应该尽量接触用户,或者倾听.不要掉进了认为你应该直接询问用户的需求或者用户会为你设计站点的圈套.用户不是设计者,他们会提出不合逻辑和不现实的要求.因为这些,你可能会设计实现自己想法的站点,而不考虑用户的需求.然而,以用户为中心的设计的核心是始终记住我们是为用户设计而不是为我们自己设计.回忆以下

用户体验和交互设计:做商业项目的产品设计体会

文章描述:做商业产品的一点体会. 6月9日,入职一周年,所以想写点什么纪念一下. 很多人问我是不是做电子商务或社会化网络的,呵呵,还真不是,而且完全不搭边.我是做商业产品的,做的是平台项目,性质偏向于整合和贯通. 所以常羡慕做用户产品的同学,能更多的关注用户体验.交互设计,有机会使用自己设计的产品,可以听到周围最真实的反馈.商业产品则功利和直接许多,关注的也不大相同,今天就简单的说说工作体会吧. 1. 做什么比不做什么更重要 商业产品的目标很明确,要么帮公司赚钱,要么帮公司省钱,或者更快更好地赚

交互设计经验分享:WEB拖放交互设计

文章描述:交互设计经验分享:WEB拖放交互设计.   开篇呈上赵本山和宋丹丹的小品笑话:  要把大象放进冰箱总共分几步? 把大象塞进冰箱要3步:1 把冰箱门打开:2 把大象装进去:3 把冰箱门带上. 这虽是一则脑筋急转弯的笑话,但却提炼出我们生活中将一个物体放进另外一个物体里通常有的3个步骤. 1.    虚实结合的世界  随着信息化时代的到来,我们的生活不仅局限于可触摸的自然环境,而且拓展到无形的虚拟环境中.继而,真实生活中的行为,如购物.交友.娱乐,也会映射到虚拟环境里.虚拟世界中,鼠标.键