建库建表的困难之处

Posted fabao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建库建表的困难之处相关的知识,希望对你有一定的参考价值。

本文想讨论建数据表的困难之处,不求面面俱到。

这里假设了,是先建库建表,再写代码,才会有下面的讨论.当然现在有新的CodeFirst的技术存在,但是我觉得这些讨论应该还有用处.

 

数据表分类

数据表分为两种:一种描述【物】,另一种描述【事】.

描述物的,比如说学生表,有姓名,出生日期,性别,班级等字段.

描述事的,比如说销售订单主从表,有开单日期,单号,商品ID,数量,售价,金额,总金额等等字段.

 

拆分组合

事和物,都具有可以拆分组合的特点.我怎么知道拆成什么样合适?

一个人,可以拆成头部,脖子,四肢,躯干几部分.也可以继续往下拆成更小的部分.

收银这件事,可以拆成收银员点商品算钱,顾客给钱,收银员找钱,这3件小事.也可以继续拆.

事物可拆解组合的特性,就使得我们在说话的时候,需要界定事物的范围。

 

物的拆分的一些讨论。

一只猪, 可以拆成头部,脖子,四肢,躯干几部分.

换一种标准,可以拆成肥肉,瘦肉,骨头几部分.

当我说:【我喜欢吃猪耳朵,不喜欢吃猪尾巴】时,我按第一种方式界定。

当我说:【我喜欢吃瘦肉,不喜欢吃肥肉】时,我按第二种方式界定。

那我为什要建立一个学生表,不去建立学生头部表,学生脖子表……这些呢?

因为我在下文中,要讨论,学生的成绩,学生的课程,学生的老师这些话题。

后文用不到,所以不需要区分。

 

事的拆分的一些讨论。

收银这件事,可以拆成收银员点商品算钱,顾客给钱,收银员找钱,这3件小事。

在软件局部编写的时候,我肯定会把,这几件小事一一写出来。

但是建表的话,我会建立收银商品清点表和结算表,这样两个表,为什么呢?

因为我是基于购物的整个流程去考虑的,购物其实就是【选购—>收银】这样一个流程,我发现收银这件事单拎出来去说能说清楚,所以我就把它单独出来。

 

属性很多

事和物,都具有很多属性,我怎么知道需要哪些属性?

一个杯子,有颜色,容积,材料等属性。

我吃饭这件事,有吃饭时间,吃的东西,用的餐具这几个属性。

事物属性很多的特点,使得我们在说话的时候,需要用到特定的属性。

 

物的属性的一些讨论。

我知道我一口气能喝200ml水,你问我用杯子A能喝几杯.

假如我不知道杯子A的容积,我就不知道我能喝几杯.

我前文中需要预先定义好后文需要的属性.就像是先建表,再写代码一样.

 

事的属性的一些讨论.

假如我不知道自己几点吃中午饭,吃多长时间,我说我吃完中午饭就过去.

你知道我几点过去吗?

你可以猜测大体时间,可能13点,也可能14点,但没有准点.

 

 总结

我们建数据表的时候需要考虑两方面:

我们怎样把一件事物同其他事物划分出来?---要建哪些表

我们又需要描述一件事物的哪些方面的属性?---要有哪些字段

 

三种答案

1.

有一个很简单的答案是,我已经有现成软件当例子了,我看着图形界面反推很明白.

 2.

我们在建表之前去分析,用自然语言去描述整个事物,对于这两个问题的解决是很有用的.

最起码我们能把最常用的几个事物确定下来,把最常用的字段列举出来

但是我们往往会有遗漏,因为我们话说着说着就会说到没有确切定义的领域,说着说着就会说到以前没有注意到的小角落.

 3.

后文说的话中用到的事物,需要在前文中预先定义好.

假如我之前说过类似的话,我大体了解需要什么,那我就能很容易的建库建表,快速全面的.

也就是说经验很有用.

 

这三种答案概况来说就是:分析,经验,模仿.

作为新手的我来说,分析能力也有限,多看多模仿,多积累经验是最有必要的.

多看多写,积累的多了,能力就提高了.

以上是关于建库建表的困难之处的主要内容,如果未能解决你的问题,请参考以下文章

Android数据库设计——1,面向对象(ORM)建库建表

Android数据库设计——1,面向对象(ORM)建库建表

关于mysql建表的问题

mysql那些事建库建表编码的选择

集群迁移使用Shell脚本获取老集群整个Hive库的建库建表DDL

集群迁移使用Shell脚本获取老集群整个Hive库的建库建表DDL