数据库思考

今天改代码的时候感觉原作者设计的表不合理,所以开始想起一些数据库设计的原理来。

一对多的表示

数据表,是一对一的数据结构,如何表示一对多呢?

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

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

小纠结

如果加入班级字段,班级就像是学生的一种属性。

如果加入班级ID字段,班级就像是一个独立的对象。

当然,实际概念虽然让人纠结;但是好的地方在于,要让表合理好用,只要搞清楚是一对一,还是一对多,还是多对多就好了。

纠结的是,就算我概念很清晰,我能像说话一样用这些概念来写程序吗?

很多时候,把这些概念装到不同的数据容器里,就够乱了。

多对多表示

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

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

也就是:学生表存学生的唯一记录;课程表存课程的唯一记录;选课表存课程和学生的对应关系。

违规操作

有的时候,违规操作看起来也是挺合理的。

比如,在课程表中,加一个字段保存所有选了这门课的学生的ID。

这样就相当于表中套表了吧??

怎么存一棵树

一棵树,每个节点有个名字,要把这棵树存到表里。

节点表(id,节点名,父节点名)。

这样就行了。

怎么还原它

如果像XML一样

 如果像XML一样,每个节点有很多属性。

那么我可以加一张表,专门存节点的属性。 

关系型数据库,采用二维表来存储数据。

二位表中的行,是关系中的元组。

我们并不能拿纯粹的数据编程,总的有个容器,总得有个名字去代指。

就算同一个数据结构,就算都是表,编程的时候可能是不同的类型。

所以很麻烦。

猜你喜欢

转载自www.cnblogs.com/fabao/p/10003234.html