N0---数据库系统

三权分立

数据库系统,符合人们使用结构化数据的需求。

没有它时,人们会用记账本或Excel来满足这一需求;但是设计良好的数据库系统一定是最好用的。

因为数据库系统系统:准确/灵活/易用。

这些优点主要靠3权分立来实现:

数据库,能准确的存取数据。

后台代码,能灵活的对数据进行计算/分析。

图形界面,便于数据的展示和用户进行操作。

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

简而言之,数据库系统主要围绕这3大块展开。

1.数据库操作

2.UI

3.后台代码

核心是业务

写代码的时候,会感觉数据是核心。

因为代码总是在操作数据,sql取数据,给后台对象复制,数据拷过来拷过去。

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

更深一步的,业务才是核心。

因为是业务需要,数据才会被搬来搬去。

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

对于业务的理解,首先有个粗理解;也就知道了数据的大体流向。

比如说采购入库。是采购单的数据,往入库单里拷贝。

再进一步的是一个细节理解;也就知道了某个具体的数据有关的东西。

比如我需要left join哪些表拿到客户想看到的字段。

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

建库建表的困难之处

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

描述物的,比如说学生表(姓名,出生日期,性别,班级)。

描述事的,比如说销售订单主从表(开单日期,单号,商品ID,数量,售价,金额)。

  • 拆分组合

事和物,都具有可以拆分组合的特点。

  • 属性繁多

事和物,都具有很多属性。

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

物的拆分。

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

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

说【我喜欢吃猪耳朵,不喜欢吃猪尾巴】时,是按方式一拆分。

说【我喜欢吃瘦肉,不喜欢吃肥肉】时,是按方式二拆分。

那我为什要建立如此一个学生表,不去建立学生头部表,学生脖子表……这些呢?因为我在下文中,要讨论,学生的成绩,学生的课程,学生的老师这些话题。但并不想讨论小学生的身体部位。

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

事的拆分。

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

我们现在从超市买东西,小票会把这些事情记录的清清楚楚。

但是有一次我去五金店买东西,那个老板只用笔记录了我买了什么东西,数量多少,并没有记录收了多少钱。

他收我钱了,但是没记录,为什么?

大概他认为记录卖了多少东西是有必要的,这能方便他算库存,再进货。

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

物的属性。

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

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

我前文中需要预先定义好后文需要的属性.

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

事的属性。

假如我不知道自己几点吃中午饭。

只知道吃饭需要10分钟。

你知道我几点吃完吗?

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

  •  要考虑的东西

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

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

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

  •  总的来说

事物都可以拆分;并且属性繁多。

究竟怎么建哪些表,建哪些字段,首先是要为业务逻辑服务的。

总体上,用户关心的事物,就描述。不关心的就不描述。

ps:数据库设计规范

有时我们会忘记规范,打破规范。在这里记录下规范。

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

一对多的表示

班级对学生,是一对多,即一个班级有多个学生。

但是一个学生只属于一个班级,从学生角度看是一对一的,所以可以在学生表里加入班级字段。

所以学生表可以是这样(学生ID,学生Name,班级)

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

多对多的表示

学生和课程,是多对多,即一个学生可以选多门课,一门课也可以被多个学生选。

这时候,加入关系表,是最佳选择。

关系表可以是这样(选课记录ID,学生ID,课程ID)

原文地址:https://www.cnblogs.com/fabao/p/10009340.html