【SQL】第3章管理数据库对象

3.1 数据库对象和模式;

数据库对象是数据库中国定义的用于存储或引用数据的对象,比如表、视图、簇、序列、索引和异名。

3.2 表:数据的主要存储方式

表是关系型数据库中的最主要的数据存储对象,其最简单的形式是由行和列组成,行和列都分别包含数据。表在数据库占据实际的物理空间,可以是永久的或是临时的。

3.2.1 列

一般使用下划线作为分隔符例如:CUSTOMER_NAME,而不使用”-”;

列也可以指定为null和not null,null并不是指没有数据而是一个空字符串,同理not null。

3.2.2 行

表中最少包含一条记录;

3.2.3 CREATE TABLE语句

Create table语句用于创建表,在创建表时需要考虑以下一些基本问题。

  1. 表中包含什么类型的数据?

解答:表中数据类型:字符串类型(定长字符串、变长字符串)、数值类型、日期和时间类型

  1. 表的名称是什么?

解答:1)表名一般以【模块名称_具体表名】来实现;2)表名称不应该取太长,一般不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符;3)不使用tab或tb作为表前缀;4)一些使用多对多连接的表,可以使用两个表的前缀作为表名,如:用户登录表User_Login,用户分组表User_GroupInfo,这两个表建立多对多关系表名为:User_Group_Relation(关系统一用relation);5)当系统中有一些少量的,重复出现的值时,使用字典表来节约存储空间和优化查询。如地区等,这类值不会在程序的运行期变化,但是需要存储在数据库中。一般数据库中,都有一个数据字典表,用来保存系统所用的基础数据,大型的字段表如省份城市区域的字典表,统一以Dictionary_作为前缀。6)使用单数形式表示名称;7)数据库中应建立一个表,就是数据库本身的字段信息,表的说明,也就是数据库设计文档的一个表;8)每个表都应该有一个主键,这个主键最好是数字,而且是递增的,有很多表的主键用32位字符编码,这样做的目的更多的是从安全考虑的。9)操作日志表,登录日志表,这是数据库中必备的两个表。操作日志表:Sys_OperateLog、登录日志表Sys_LoginLog、系统字典表Sys_Dictionry、系统字典表类型Sys_DicType。

操作日志表Sys_OperateLog:

中文名

字段名

注释

操作日志编码

OL_ID

索引列,日志的编号

操作类型

OL_Type

添加、修改、删除、查询等内容(可放在通用字典表)

操作模块

OL_Module

操作模块,比如新闻模块关联的是菜单表编号

操作内容

OL_Content

操作了什么内容,越具体越好(修改前、修改后)

操作人

UI_ID

用户的信息

操作时间

OL_AddDate

日志记录创建时间

操作IP

OL_IP

操作人的IP地址

备注信息

OL_Remarks

备注信息,一些其它的需要说明的信息

登录日志表Sys_LoginLog:

中文名

字段名

注释

登录日志编号

LL_ID

登录的日志编号

登录人

UI_ID

登录人

登录时间

LL_AddDate

登录时间

登录IP

LL_IP

登录的IP地址

登录状态

LL_Status

登录是否成功的标识

登录浏览器

LL_Broeser

登录浏览器

登录分辨率

LL_Resolution

登录的屏幕分辨率

系统字典表Sys_Dictionary:

中文名

字段名

注释

字典编号

SD_ID

字典的编号,可以直接使用此主键的编码(注意删除时的关联关系)

字典类型

DY_ID

字典类型的ID,需要建立字典类型表,因为放的是所有的字典表

字典编码

SD_Code

字典编码,支持自己编码(同一类型是唯一的,一般是整数型)

字典中文名称

SD_Name

字典中文名称(比如男女,比如状态,可以放到字典里,作为查看依据)

字典备注

SD_Remarks

字典备注,字典需要一些备注信息

创建人

创建日期

修改人

修改日期

3.数据字典

数据字典分为两种方式:

1)把主体的属性代码放入独立的表中,不是和主题放一起,主体中只保留属性的代码。这里属性的数量是不变的,这里属性的数量是不变的,而属性取值的数量可以是变化的。

例如:

《职员表》

姓名

证件

性别

张三

身份证

李四

身份证

使用了数据字典后:

《职员表》

姓名

证件

性别

张三

001

李四

001

另外增加了《证件表》

《证件表》

证件id

证件名

001

身份证

002

暂住证

这个证件表就是一种数据字典。要改变证件名称时,只要把其中的“身份证”改成“居民身份证”就可以了。

但第一种也有局限性。使用第一种数据字典后,程序员除“职员”类外,还就需要有一个“国籍”类、一个“证件”类和一个“学历”类,对应的数据库中也需要增加一张“学历”表。“职员”类则需要包含一个对“国籍”类的引用,一个对“证件”类的引用,对应的数据库中“职员”表中也需要三个外键分别指向国籍表、证件表、和学历表。这样的设计在类似国籍和学历这样的属性比较少时时可行的,但是随着系统复制性的增加,系统中会出现大量结构类似的信息表,数量一直会增加到一个不饿接受的地步。

2)用一个表放结构相同的所有属性信息,不同属性的不同取值统一编码,用类型来区分不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。第二种数据字典比第一种更抽象,层级更高,也更具一般性、通用性。

还是以上面的例子为例。在系统中去掉《国籍表》、《证件表》、《学历表》等,引入《系统代码分类表》和《系统代码表》

《系统代码分类表》

分类标识

分类名称

country

国籍

Id

证件

《系统代码表》

标识

分类

内容

001

country

中国

002

country

美国

003

ID

身份证

004

ID

暂住证

对于《职员表》,使用第一种数据字典时,其结构时:职员表、姓名、国籍ID、证件ID、学历ID...

采用第二种数据字典后,其表结构是:职员ID、姓名另外增加属性表,该表是《职员表》和《系统代码表》的关系表,其表结构是:属性ID、职员ID、系统代码表_标识

如:

《职员表》

职员ID

姓名

1

张三

2

李四

《属性表》

属性ID

职员ID

系统代码表标识

1

1

001(表示张三是中国籍)

2

1

501(表示张三的证件是身份证)

3

2

002(表示李四是美国籍)

4

2

501(表示李四的证件是身份证)

  1. 哪个(或哪些)列组成主键?
  2. 列的名称是什么?
  3. 每一列的数据类型是什么?
  4. 每一列的长度是多少?
  5. 表中哪些列可以是null?

注意:不同的系统往往有不同的命名规则

在命名对象和其它数据库元素时,一定要查看具体实现的规则。数据库管理员通常会采用某种“命名规范”来决定如何命名数据库中的对象,以便区分它们的用途。

创建表的语法如下:

Create table table_name

(field1 data_type [ not null ],

field2 data_type [ not null ],

Field3 data_type[ not null ] );

下述代码同时适用于 Microsoft SQL Server 和 Oracle;

Create table employee_tbl

(EMP_ID           varchar  (9)      not null,

EMP_NAME        varchar  (40)    not null,

EMP_ST_ADDR      varchar  (20)     not null,

EMP_CITY          varchar  (15)     not null,

EMP_ST            varchar (2)       not null,

EMP_ZIP           integer           not null,

EMP_PHONE        integer           null,

EMP_PAGER         integer           null);

这个表包含8列。列的名称使用下划线进行分隔,使其看起来像是独立的单词(EMPLOYEE ID 被存储为EMP_ID),这种方式可以使表和列具有更好的可读性。

3.2.4 命名规范

表的列和表命名若多个英文单词中间用“_”表示;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值