数据库学习--基于postgreSQL的数据库设计与主键 外键

前言

学习数据库设计已经有多个星期了,现在有时间整理一下,又整合了一些其他的数据库的基本知识,显得稍乱。

postgreSQL数据库

本博文以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

数据库设计

安装pgAdmin

本次数据库设计使用的工具是基于postgreSQL的pgAdmin3,前往下载;

a.使用命令下载;

命令:

sudo apt-get install pgadmin3;

b.官网下载安装(请自行实践);

数据库设计原则

数据库设计原则的相关资料可以参见下面的资料:
http://blog.csdn.net/kevinpake/article/details/8818140
本博文以个人的实践操作为出发点。

实践操作

连接数据库

具体步骤如下:

a.开启postgreSQL的server;
命令:

service postgresql restart;
b.打开pgAdmin3;
附图:
pgadmin
c.添加一个postgreSQL服务器连接;
原图:
lianjie1
信息完善后的图:
ok
注:密码可以不设。

常见错误

a.数据库的服务器为打开;
b.主机搞错,注意不是IP;(本地主机localhost和本机的IP自己查找资料)

创建数据库数据表

a.创建数据库;
b.创建数据表;
以上步骤按照平常的步骤进行即可,不再赘述。

主键和外键

概念理解

主键

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
1.学生表(学号,姓名,性别,班级),其中每个学生的学号是唯一的,学号就是一个主键;
2.课程表(课程编号,课程名,学分),其中课程编号是唯一的,课程编号就是一个主键;
现在来一张成绩表(学号,课程号,成绩),
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。

外键

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

设计外键的目的
1.为了一张表记录的数据不要太过冗余

解释:比如想要设计下图的一张表,如果设计为上图的表显然太过于冗余,如果设计为下面的两个表,会不会更好呢(自行体会)。那么如何保证两个表之间的关联呢?注意:我们自身明白两个表之间是通过学号这个字段来连接的,可是如何让数据库明白呢?这就是外键的作用了。
总表

2.保持数据的一致性和完整性

通俗的解释:
比如表1中张三的学号为20140900001,那么我在表2中插数据的时候在学号字段插20140900001来记录张三的成绩不也是做到了表 的解耦了吗?
这里存在的问题是,在不设置外键的情况下,表2的学号字段和表1的学号字段是没有关联的。只是你自己认为他们有关系而已,数据库并 不认为它俩有关系。也就是说,你在表2的学号字段插了一个值(比如20140999999),但是这个值在表1中并没有,这个时候,数据库还是允 许你插入的,它并不会对插入的数据做关系检查。然而在设置外键的情况下,你插入表2学号字段的值必须要求在表1的学号字段能找到。 同时,如果你要删除表1的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。你想,如 果表2还引用表1的某个学号,你却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。数据的一致性还包括数据类型的一致性(这 个见下面就知道了)。
附图理解:
引用

外键的作用–一致性完整性

小结

1.表1的”学号”字段是表2的”外键”(不要反了);
2.被设为外键的字段不能删除;
以图说事:
suff表的id字段被设为外键
stuff
现在删除id字段(报错了)
waijian

参考资料

http://www.2cto.com/database/201406/310213.html

总结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值