学习数据库设计已经有多个星期了,现在有时间整理一下,又整合了一些其他的数据库的基本知识,显得稍乱。
本博文以postgreSQL数据库为操作基础。
复习一下常用的postgreSQL数据库命令:(注意:postgreSQL的SQL命令都要以分号”;”结束,不然无效)
*进入数据库
psql -U postgres(默认用户名为postgres)
*退出数据库
\q
切换数据库,相当于mysql的use dbname
\c dbname
列举数据库,相当于mysql的show databases
\l
创建数据库:
create database [数据库名];
删除数据库:
drop database [数据库名];
列举表,相当于mysql的show tables
\dt
查看表结构,相当于desc tblname,show columns from tbname
\d tblname
\di 查看索引
创建表:
create table ([字段名1] [类型1] ;,[字段名2] [类型2],……<,primary key
(字段名m,字段名n,…)>;);
*重命名一个表:
alter table [表名A] rename to [表名B];
*删除一个表:
drop table [表名];
在表中插入数据:
insert into 表名 ([字段名m],[字段名n],……) values ([列m的值],[列n的值],……);
*查看数据表的内容:
select * from [表名];
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
*删除表中的字段:
alter table [表名] drop column [字段名];
*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
*去除缺省值:
alter table [表名] alter column [字段名] drop default;
修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据:
delete from [表名] where [该行特征]; delete from [表名];–删空整个表
http://blog.chinaunix.net/uid-26642180-id-3485465.html
本次数据库设计使用的工具是基于postgreSQL的pgAdmin3,前往下载;
命令:
sudo apt-get install pgadmin3;
数据库设计原则的相关资料可以参见下面的资料:
http://blog.csdn.net/kevinpake/article/details/8818140
本博文以个人的实践操作为出发点。
a.开启postgreSQL的server;
命令:
service postgresql restart;
b.打开pgAdmin3;
附图:
c.添加一个postgreSQL服务器连接;
原图:
信息完善后的图:
注:密码可以不设。
a.数据库的服务器为打开;
b.主机搞错,注意不是IP;(本地主机localhost和本机的IP自己查找资料)
a.创建数据库;
b.创建数据表;
以上步骤按照平常的步骤进行即可,不再赘述。
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
1.学生表(学号,姓名,性别,班级),其中每个学生的学号是唯一的,学号就是一个主键;
2.课程表(课程编号,课程名,学分),其中课程编号是唯一的,课程编号就是一个主键;
现在来一张成绩表(学号,课程号,成绩),
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
解释:比如想要设计下图的一张表,如果设计为上图的表显然太过于冗余,如果设计为下面的两个表,会不会更好呢(自行体会)。那么如何保证两个表之间的关联呢?注意:我们自身明白两个表之间是通过学号这个字段来连接的,可是如何让数据库明白呢?这就是外键的作用了。
通俗的解释:
比如表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表 的解耦了吗?
这里存在的问题是,在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并 不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性(这 个见下面就知道了)。
附图理解:
1.表1的”学号”字段是表2的”外键”(不要反了);
2.被设为外键的字段不能删除;
以图说事:
suff表的id字段被设为外键
现在删除id字段(报错了)
http://www.2cto.com/database/201406/310213.html