关于数据库系统
三权分立
数据库系统,符合人们使用结构化数据的需求。
没有它时,人们可能用记账本或Excel来满足这一需求;但是设计良好的数据库系统一定是最好用的。
因为数据库系统系统:准确/灵活/易用。
这些优点主要靠3权分立来实现:
数据库,能准确的存取数据。
后台代码,能灵活的对数据进行计算/分析。
图形界面,便于数据的展示和用户进行操作。
-----------------------------------------------------------
简而言之,数据库系统主要围绕这3大块展开。
1.数据库操作
2.UI
3.后台代码
核心是业务
写代码的时候,会感觉数据是核心。
因为代码总是在操作数据,sql取数据,后端语言操作数据。
----------------------------------------------------------------------------------------
更深一步的,业务才是核心。
因为是业务需要,数据才会被搬来搬去。
-----------------------------------------------------------------------------------------
建库建表的困难之处
数据表分为两种:一种描述【物】,另一种描述【事】.
描述物的,比如说学生表(姓名,出生日期,性别,班级)。
描述事的,比如说销售订单主从表(开单日期,单号,商品ID,数量,售价,金额)。
- 拆分组合
事和物,都具有可以拆分组合的特点。
- 属性繁多
事和物,都具有很多属性。
---------------------------------------------------------------------------------
物的拆分。
一只猪, 可以拆成头部,脖子,四肢,躯干几部分.
换一种标准,可以拆成肥肉,瘦肉,骨头几部分.
说【我喜欢吃猪耳朵,不喜欢吃猪尾巴】时,是按方式一拆分。
说【我喜欢吃瘦肉,不喜欢吃肥肉】时,是按方式二拆分。
那我为什要建立如此一个学生表,不去建立学生头部表,学生脖子表……这些呢?
因为我在下文中,要讨论,学生的成绩,学生的课程,学生的老师这些话题。但并不想讨论小学生的身体部位。
-----------------------------------------------------------------------------------
事的拆分。
收银这件事,可以拆成收银员点商品算钱,顾客给钱,收银员找钱,这3件小事。
我们现在从超市买东西,小票会把这些事情记录的清清楚楚。
但是有一次我去五金店买东西,那个老板只用笔记录了我买了什么东西,数量多少,并没有记录收了多少钱。
他收我钱了,但是没记录,为什么?
大概他认为记录卖了多少东西是有必要的,这能方便他算库存,再进货。
-----------------------------------------------------------------------------------
物的属性。
我知道我一口气能喝200ml水,你问我用杯子A能喝几杯.
假如我不知道杯子A的容积,我就不知道我能喝几杯.
我前文中需要预先定义好后文需要的属性.
-------------------------------------------------------------------------------------
事的属性。
假如我不知道自己几点吃中午饭。
只知道吃饭需要10分钟。
你知道我几点吃完吗?
--------------------------------------------------------------------------------------
- 要考虑的东西
我们建数据表的时候需要考虑两方面:
我们怎样把一件事物同其他事物划分出来?---要建哪些表
我们又需要描述一件事物的哪些方面的属性?---要有哪些字段
- 总的来说
事物都可以拆分;并且属性繁多。
究竟怎么建哪些表,建哪些字段,首先是要为业务逻辑服务的。
总体上,用户关心的事物,就描述。不关心的就不描述。
ps:数据库设计规范
有时我们会忘记规范,打破规范。在这里记录下规范。
---------------------------------------------------------------------------------
一对多的表示
班级对学生,是一对多,即一个班级有多个学生。
但是一个学生只属于一个班级,从学生角度看是一对一的,所以可以在学生表里加入班级字段。
所以学生表可以是这样(学生ID,学生Name,班级)
---------------------------------------------------------------------------------
多对多的表示
学生和课程,是多对多,即一个学生可以选多门课,一门课也可以被多个学生选。
这时候,加入关系表,是最佳选择。
关系表可以是这样(选课记录ID,学生ID,课程ID)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步