关于数据库设计

关于数据库设计的规范

鄙人对于数据库设计理解的加深得益于我老师的引导,直接发链接,胖先生的博客地址: http://pangsir8983.github.io/ ,虽然对于数据库的理解深刻了许多,但是在层次上仍处于小白阶段。如果说让自己组织语言来表达的话还是会有所欠缺,下面就通过多方面信息搜集结合自己的理解来说明一下数据库建表的一些简单要求,那就先从范式入手吧!

范式是什么?

你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。

  • 目前关系数据库有六种范式:
    • 第一范式(1NF)
    • 第二范式(2NF)
    • 第三范式(3NF)
    • 巴斯-科德范式(BCNF)
    • 第四范式(4NF)
    • 第五范式(5NF,还又称完美范式)

Java向上取整相关函数问题

在之前写代码的时候这个小细节出现过两次,主要是对Java向上取整以及向下取整方法的理解不够透彻

下面来介绍将小数值舍入为整数的几个方法:Math.ceil()、Math.floor()和Math.round()。 这三个方法分别遵循下列舍入规则:

  • Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
  • Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
  • Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。

记下笔记加深印象,事不过三,错误代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**下面是一个封装类,分页用的,结合Mybatis取出来的数据计算页数,需要用到向上取整*/
public class Pager{
/**第一个整型数据,每页显示的条数,为5条,注意这两个都是整型数据!!!*/
private Integer pageSize = 2;
/**总记录数*/
private Integer totalCount;
//下面就不啰嗦了,这不是一个完整的类
}

/**这是我计算页数的方法*/

public List<User> findAllStudentInfo(Pager pager) {
//省略前面部分代码,直接进入主题
//通过Mybatis查询到的总记录数赋值给Pager类对应属性
pager.setTotalCount(studentService.findStuInfoCount(map));
//通过向上取整获取总页数,假设 totalCount = 3;执行如下代码
pager.setTotalPages((int)Math.ceil(pager.getTotalCount()/pager.getPageSize());
/** Math.ceil(3/2) 结果是多少,对于基础深厚的人来说,其实都已经知道答案了*/
/** 刚开始我自己以为是2,3除以2向上取整,为2没有问题啊。事实结果是 1 */
return studentService.findAllStudentInfo(map);
}

/**这个问题我之前错过一次,最近又错了一个,我相信向上取整向下取证这两个函数这辈子我都不会忘记了*/

/**正确代码,如果你有跟我一样的问题,相信你看到代码就知道自己太马虎了,或者说对函数理解不够深*/
//正确代码如下
public List<User> findAllStudentInfo(Pager pager) {
//省略前面部分代码,直接进入主题
//通过Mybatis查询到的总记录数赋值给Pager类对应属性
pager.setTotalCount(studentService.findStuInfoCount(map));
double totalCount = studentService.findStuInfoCount(map);
//注意我接收数据的类型。。。。。。!!!是double。类型转换规则就不需要我说了吧!
double pageSize = pager.getPageSize();
double result = totalCount/pageSize;
/**现在在看看这个函数,result是什么类型,很明显是double*/
pager.setTotalPages((int)Math.ceil(result));
return studentService.findAllStudentInfo(map);
}

我上面的错误代码之所以错误,是因为一心求快,本来我类的属性类型是Integer类型的。如果直接

在ceil()函数里面直接执行 3/2 结果当然是 1 而不是1.5,那么对1去执行向上取整根本没有任何意义,

所以,首先要明白向上取整,向下取整函数是对什么类型的数据进行操作的,明白了这点,再看一下我正确代码

好像一切就有点顺理成章了。出现这个问题,主要是自己对这两个函数的理解不够深刻。希望事不过三,是不是意味着我还有一次机会?哈哈!!

明天我选择阳光

  • Tomorrow‘s target
    • 整理Java Web开发所涉及API 打包成工具。
    • 在Intellij IDE配置Spring相关信息,调试并体验Intellij的优点。
    • 继续学习MarkDown
    • 背单词。好好复习数据结构,多写代码。

向着有阳光的地方奔跑,才能把黑暗甩在身后!

---纪伯伦