一直以来对数据库都不太熟悉,在公司设计到的表也大多是一张或者两张,关联也很少做。 所以一直都不大懂数据库,SQL语句也只会最简单的。现在需要好好把基础概念搞清楚。
一、数据库表
如果一个Excel文件是一个数据的话,那么一个Sheet就是一张表,一个数据库中可以有多张表,不过数据库中叫做Table。
二、字段
Excel的一个Sheet中有行和列,数据库表中也有。第一行一般是字段的集合,剩下的每一行表示每一条记录,每一列表示这个字段的所有值。字段就是用于描述一个Table的属性的最小单位,如人口表中的姓名,年龄等等。
三、键
和一本汉语字典类似,我们总希望快速地找到一个汉字的说明,一般使用拼音去找,这里的拼音就是键。不过拼音不能当成主键,因为有同音字,而主键是不能有重复的。每个表最好都有主键,如果没有的话,最好有一个唯一标识每条记录的字段。如IP定位库中,经常使用的是将每个点分十进制转为32位无符号整数所表示的数字,也能当做主键使用,可以减少一个字段的使用,减少空间占用。
外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外关键字。由此可见,外关键字表示了两个关系之间的联系。以另一个关系的外关键字作主关键字的表被称为主表,具有此外关键字的表被称为主表的从表。外关键字又称作外键。外键经常用来关联两张表使用。
四、记录
记录,如果看Excel的话,就是每一行的数据,记录都是按照行(或者条)计数的。
五、视图
视图也叫做虚表,即不是一个实际存在的表。一般情况下,是将几张表关联起来得到的一个数据集合,交给用户使用。如果更改视图中的数据,那么原始表中的数据也会修改,所以使用最好是只读的,这样不仅可以隐藏真实的表结构,而且根据业务定制视图函数,不用每次都去关联,更加灵活。
六、关系
两张表的关系,在数据库中的Table,不像Excel中的Sheet,一般情况下,可能表和表之间都有些联系。两两之间的关系有三种:
1.一对一的关系:
比如领结婚证登记的时候,两个人都要登记,如果分成两个表,分别表示男女的话。
那么最简单的可以用两个字段就能描述婚姻关系了,自己的身份证+配偶的身份证。如果一方的删除,另一方的一定也要删除。正常情况下,不允许出现其它的情况。
2.一对多的关系:
最经典的就是学生和班级的例子,班级有班级号码1,2,3等等,学生有学号0000-9999,学生表中还有班级号表示属于哪个班级的字段。这就是一个一对多的关系,一个班级对应多个学生,而一个学生只能对应一个班级。
3.多对多的关系:
比较好的例子是公交车和公交站,一个公交站上可能有好几路公交车,一个公交车对应了很多个公交站。用公交车的路数找公交站,能找到很多个,同样,使用公交站牌号找公交车也能找到很多个。一般多对多的关系比较复杂,还是尽可能设计成一对多或者一对一的关系。
七、数据库设计的简单原则:
0)每个表表示单一的主题,比如建立动物的数据库的表,最好不要设计成这样的字段。
海洋 陆地 哺乳动物 非哺乳动物 因为他们的主题不是单一的,以至于难以给它起个名字。
1)最好给每个表加一个主键,而且加上约束,比如在0-MAX_INT之间的数字。
2)主键的值最好是不能修改的值,也最好不要更改主键的值。
3)字段名字不用缩写,比如xsh,很难想出来他是学生号的意思,即便用拼音也要全拼。
4)数据库中每个字段有唯一的名字,除非有关联的情况,不然最好在整个数据库中仅出现一次,
比如每个表中最好不要都起一个ID作为主键名字,加上些描述性单词。
5)最好给一些字段加上约束,避免出现错误的情况,比如性别,限定为男女,或者01,其他值都是非法的。
6)每个字段最好只有一个部分,避免多部分字段。比如一个国内电话号码的字段,最好分开设计为两个字段:城市区号和电话号码。这样不仅方便查找,也方便更新。
7)每个字段只有一个值,避免多值字段。比如学生选修课程这个业务,避免设计成一张表,包含课程号,加上N个选修的学生名字。这样难以查询和维护,这是一个多对多的关系,可以拆成三个表,一个课程表(主要包括课程号,课程描述),一个学生表(主要包括学生号,学生选课号),一个学生选课表(主要包括学生号,课程号)。这样就把多对多的化解掉了,方便查找和更改。
8)减少关联表中的重复字段,有些字段可以通过两个表关联表得到,那么他们不应当作为表的自段,可以得到一个视图或者临时表,但是没必要设计成基表的字段。这样会使得表的结构臃肿。
没有评论:
发表评论