建库建表的困难之处
Posted fabao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建库建表的困难之处相关的知识,希望对你有一定的参考价值。
本文想讨论建数据表的困难之处,不求面面俱到。
这里假设了,是先建库建表,再写代码,才会有下面的讨论.当然现在有新的CodeFirst的技术存在,但是我觉得这些讨论应该还有用处.
数据表分类
数据表分为两种:一种描述【物】,另一种描述【事】.
描述物的,比如说学生表,有姓名,出生日期,性别,班级等字段.
描述事的,比如说销售订单主从表,有开单日期,单号,商品ID,数量,售价,金额,总金额等等字段.
拆分组合
事和物,都具有可以拆分组合的特点.我怎么知道拆成什么样合适?
一个人,可以拆成头部,脖子,四肢,躯干几部分.也可以继续往下拆成更小的部分.
收银这件事,可以拆成收银员点商品算钱,顾客给钱,收银员找钱,这3件小事.也可以继续拆.
事物可拆解组合的特性,就使得我们在说话的时候,需要界定事物的范围。
物的拆分的一些讨论。
一只猪, 可以拆成头部,脖子,四肢,躯干几部分.
换一种标准,可以拆成肥肉,瘦肉,骨头几部分.
当我说:【我喜欢吃猪耳朵,不喜欢吃猪尾巴】时,我按第一种方式界定。
当我说:【我喜欢吃瘦肉,不喜欢吃肥肉】时,我按第二种方式界定。
那我为什要建立一个学生表,不去建立学生头部表,学生脖子表……这些呢?
因为我在下文中,要讨论,学生的成绩,学生的课程,学生的老师这些话题。
后文用不到,所以不需要区分。
事的拆分的一些讨论。
收银这件事,可以拆成收银员点商品算钱,顾客给钱,收银员找钱,这3件小事。
在软件局部编写的时候,我肯定会把,这几件小事一一写出来。
但是建表的话,我会建立收银商品清点表和结算表,这样两个表,为什么呢?
因为我是基于购物的整个流程去考虑的,购物其实就是【选购—>收银】这样一个流程,我发现收银这件事单拎出来去说能说清楚,所以我就把它单独出来。
属性很多
事和物,都具有很多属性,我怎么知道需要哪些属性?
一个杯子,有颜色,容积,材料等属性。
我吃饭这件事,有吃饭时间,吃的东西,用的餐具这几个属性。
事物属性很多的特点,使得我们在说话的时候,需要用到特定的属性。
物的属性的一些讨论。
我知道我一口气能喝200ml水,你问我用杯子A能喝几杯.
假如我不知道杯子A的容积,我就不知道我能喝几杯.
我前文中需要预先定义好后文需要的属性.就像是先建表,再写代码一样.
事的属性的一些讨论.
假如我不知道自己几点吃中午饭,吃多长时间,我说我吃完中午饭就过去.
你知道我几点过去吗?
你可以猜测大体时间,可能13点,也可能14点,但没有准点.
总结
我们建数据表的时候需要考虑两方面:
我们怎样把一件事物同其他事物划分出来?---要建哪些表
我们又需要描述一件事物的哪些方面的属性?---要有哪些字段
三种答案
1.
有一个很简单的答案是,我已经有现成软件当例子了,我看着图形界面反推很明白.
2.
我们在建表之前去分析,用自然语言去描述整个事物,对于这两个问题的解决是很有用的.
最起码我们能把最常用的几个事物确定下来,把最常用的字段列举出来
但是我们往往会有遗漏,因为我们话说着说着就会说到没有确切定义的领域,说着说着就会说到以前没有注意到的小角落.
3.
后文说的话中用到的事物,需要在前文中预先定义好.
假如我之前说过类似的话,我大体了解需要什么,那我就能很容易的建库建表,快速全面的.
也就是说经验很有用.
这三种答案概况来说就是:分析,经验,模仿.
作为新手的我来说,分析能力也有限,多看多模仿,多积累经验是最有必要的.
多看多写,积累的多了,能力就提高了.
以上是关于建库建表的困难之处的主要内容,如果未能解决你的问题,请参考以下文章