优化数据库设计

                                       第一章 (E-R)图

实体可以是有形的事物,一个实体只描述一件事情。

映射基数:

1对1:X中的一个实体最多与Y中的一个实体关联。

1对多:X中的一个实体可以与Y中的任意数量的实体关联。

多对1:X中的一个实体最多与Y中的一个实体关联。

多对多:X中的一个实体可以与Y中的任意数量的实体关联。

图形:

矩形表示实体集。

椭圆形表示属性。

菱形表示联系集。

直线用来连接属性和实体集,也用来连接实体集和联系集。

范式:

第一范式:实现每列的数据不可以再分。

第二范式:目标:确保一张表只做一件事,实现:满足第一范式,其他列与主键都有关系。

第三范式:实现:满足第三范式,除主键外其他列都不传送依赖。

                                    第二章 (创建数据库和表,约束)

T-SQL语句构成
1.DML(数据库操作语言)
INSERT,UPATE,DELETE
2.DCL(数据控制语言)
3.DQL(数据查询语言)
4.DDL(数据定义语言)
CREATE DATABASE CREATE TABLE
创建数据库的步骤:
1、确定数据库
use master
2、判断数据库是否存在,若存在则删除数据库
if EXISTS(select * from sysdatabases where name=’数据库名’) DROP DATABASE 数据库名
3.创建数据库:
CREATE DATABASE 数据库名
ON RTMARY
(
--数据库主要文件参数
NAME=‘数据库主要文件逻辑名称’,
FILENAME=’数据库主要文件物理名称’,--路径
SIZE=数据库主要文件初始大小,
MAXSIZE=数据库文件最大值,
FILEGROWTH=数据库主要文件增长率
)
LOG ON
(
--数据库日志文件参数
NAME=‘数据库主要文件逻辑名称’,--名字后一般加个_log
FILENAME=’数据库主要文件物理名称’,
SIZE=数据库主要文件初始大小,
MAXSIZE=数据库文件最大值,
FILEGROWTH=数据库主要文件增长率

)

创建表的步骤:
1、确定数据库:
use 数据库名
2、判断数据表是否存在,若存在则删除数据表:
IF EXISTS(select * from sysobjects where name=‘数据表名‘)
DROP TABLE 数据表名
3、创建表:
CREATE TABLE 数据表名
(
列名1 数据类型 标识列 是否为空,-- studentNo int NOT NULL,不为空
IDENTITY(1,1)--标识种子,标识增量
列名2 数据类型 标识列 是否为空,-- studentNo int,为空
.....

)
创建数据表的约束:
use 数据库名
1.主键约束(不能为空)

ALTER TABLE 数据表名 [WITH NOCHECE] ADD
CONSTRAINT 主键名 PRIMARY KEY(列名)
(PK_表名)
[WITH NOCHECE]:可以省略,暂时不检查数据约束
2.唯一约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 唯一约束名 UNIQUE(列名)
(UN_列名)
3.检查约束
ALTER TABLE 数据库名 ADD
CONSTRAINT 检查约束名 CHECK(表达式)
(CK_列名) (列名>=‘1980-1-1’)
4.默认值约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 默认值约束名 DEFAULT(值) FOR 列名
(DF_列名)
5.外键约束
ALTER TABLE 数据表名 ADD
CONSTRAINT 外键约束名 FOREIGN KEY(列名) REFERENCES 主表名(列名)
(FK_子表名_主表名_主表上的列名)
删除约束:
ALTER TABLE 表名
DROP CONSTRAINT 约束名

                                       第三章(SQL编程)

T-SQL的变量
1、局部变量:
定义:由自己声明的变量。
形式:@变量名
应用:
1、声明:
DECLARE @变量名 数据类型
2、赋值:
1.SET方式赋值:
SET @变量名=值
SET @变量名=(Select 列名 from 表名 where 条件)
注意事项: 1.SET只能为一个变量赋值
2.SET赋值时,变量值只能是一个,若有多个变量将报错
2.SELECT方式赋值:
SELECT @变量名=值
SELECT @变量名=列名 from 表名 where 查询条件
注意事项:1.SELECT可以为多个变量赋值
2.SELECT赋值时,若变量值有多个,将赋于变量最后一个变量值
3.查询条件可以省略,一般不省略
4.赋值时,变量值为NULL,若变量之前的值是NULL,则变量被赋予NULL值
5.赋值时,变量值为NULL,若变量之前的值不是NULL,则变量将保持原有值
3、调用:
PRINT @变量名 --打印
2、全局变量
定义:由系统声明的变量,只能使用不能修改
形式:@@变量名
应用:
常用全局变量:
[email protected]@ERROR:最后一个T-SQL的错误号
[email protected]@IDENTITY:记录最后一次插入的标识值
3.
数据转换:CONVERT(nvarchar(10),列名,格式)
(100,101,111...)
CAST(表达式AS数据类型)
T-SQL逻辑控制:
1.顺序结构:
2.分支结构:
1)IF-ELSE选择结构:
语法:
IF(判断条件)
BEGIN
代码块1
END
ELSE
BEGIN
代码块2
END
2)CASE-WHEN结构:

3.循环结构:
1)WHILE循环结构:
语法:
WHILE(循环条件)
BEGIN
循环操作
END

                                  第四章(高级查询)

SELECT.........FROM 表1 WHERE 列1>(子查询)

一个查询里面嵌套另一个完整的查询语句

子查询还可以在多表间查询符合条件的数据,从而替换表连接(join)查询。

IN 和NOT IN子查询

IN(包含这个区间的)

NOT IN(包含这个区间以外的)

IF EXISTS(子查询)

语句

如果子查询的结果非空,则EXISTS(子查询)将返回真(true),否则返回假(false).

子查询可以指定表名

SELECT * FROM (子查询) AS 表的别名

                            第六章(事务,视图,索引)

事务:
属性:
原子性:
一致性:
隔离性:
永久性:
步骤:
1.开始事务
BEGIN TRANSACTION
2.业务处理,记录处理结果
3.判断处理结果
若处理结果为零,提交事务:
COMMIT TRANSACTION
若处理结果不为零,回滚事务:
rollback trnsaction
if(@num=0)
begin
commit transaction
end
else
begin
rollback trnsacition
end
分类:
1.显示事务

2.隐式事务
注意:将截断字符串或二进制数据(长度不够)
视图:
语法:
1.确定数据库
use 数据库名
2.判断视图是否存在,若存在则删除视图
IF EXISTS(select * from sysobjects where name=‘视图名‘)
DROP VIEW 视图名
GO
3.创建视图
CREATE VIEW 视图名
AS
--SQL查询语句
GO
4.使用视图:
可以重复使用的虚拟表
不能使用 order by,insert

索引:
类型
唯一索引

主键索引

聚集索引
数据逻辑位置与物理位置一致,一张表只有一个聚集索引
非聚集索引
数据逻辑位置不与物理位置一致,一张表有多个非聚集索引

                              第七章(存储过程)

存储过程
1.系统存储过程
由系统定义并实现,以sp_开头
2.扩展存储过程

3.用户自定义存储过程
由用户自定义并实现,以usp_开头

语法
1.确定数据库
use 数据库名
2.判断存储过程是否存在,若存在则删除
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE
NAME=‘存储过程名‘) DROP PROCEDURE 存储过程名
Go
3.创建存储过程
CREATE PROCEDURE 存储过程名
参数列表
(默认:=赋值)(OUTPUT:传出参数)
AS
--SQL语句S
4.调用存储过程
EXECUTE 存储过程名 参数列表
1.(按照参数的顺序依次赋值)
2.(指定参数名称给予参数赋值)
3.(以default关键字替代有默认值的参数)
4.(定义变量来接收传出参数,变量名 OUTPUT)

时间: 2024-08-05 15:23:04

优化数据库设计的相关文章

15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat

优化MySchool数据库设计之【巅峰对决】

优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要进行验证 02.查看帮助文档和搜索引擎的使用 借助网络上的Blog文章 03.不要急功近利 不要抱着速成的想法,否则必然走弯路学习编程不是一蹴而就的事情付出的成本高,才能有一个高薪的收入 04.不要浮躁 不要什么都学,只学有用的 浮躁的程度和技术水平成反比的走自己的路,让别人去浮躁去吧! 每

数据库设计范式和数据库优化

数据库设计三大范式: 1.原子性:每一列的属性值不可再分 2.原始性:对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性:要求每张表只表达一个意思 3.所有字段都和主键直接相关,如果要和其他表建立关联,可以增加外键. 数据库优化: 1.建立合适的索引.选取最适用的字段属性,将表中字段的宽度设得尽可能小,尽量把字段设置为NOT NULL 2.优化sql语句.使用连接(JOIN)来代替子查询(Sub-Queries),使用联合(UNION)来代替手动创建的临时表

公交车路线查询系统后台数据库设计--换乘算法改进与优化

在<查询算法>一文中已经实现了换乘算法,但是,使用存储过程InquiryT2查询从“东圃镇”到“车陂路口”的乘车路线时,发现居然用了5分钟才查找出结果,这样的效率显然不适合实际应用.因此,有必要对原有的换乘算法进行优化和改进.在本文中,将给出一种改进的换乘算法,相比原有的算法,改进后的算法功能更强,效率更优. 1. “压缩”RouteT0 假设RouteT0有以下几行 如下图所示,当查询S1到S4的二次换乘路线时,将会产生3×2×4=24个结果 从图中可以看出,第1段路线中的3条线路的起点和站

mysql_数据库设计类型选择及优化

数据库设计原则: a,更小的通常更好. 应该尽量使用可以正确存储数据的最小数据类型.如只要存储0-200,tinyint unsigned更好 b,简单就好 简单的数据类型的操作需要更少的cpu周期.同时后期优化也更为容易. c,尽量避免使用null mysql在建立索引,优化过程对null需要做特殊处理,耗费额外资源.非特殊情况,避免使用null. 数据类型常识 一,整数类型 根据存储空间: TINYINT SMALLINT MEDIUMINT INT BIGINT 存储空间位数n 8 16

性能优化系列六:数据库设计

一.为优化而设计 1. 数据库设计 数据库设计,一个软件项目成功的基石.数据库设计也是门学问.在项目早期由开发者进行数据库设计(后期调优需要DBA).一个精通OOP和ORM的开发者,设计的数据库往往更为合理,更能适应需求的变化.因为数据库的规范化,与OO的部分思想雷同(如内聚).而DBA,设计的数据库的优势是能将DBMS的能力发挥到极致,能够使用SQL和DBMS实现很多程序实现的逻辑,与开发者相比,DBA优化过的数据库更为高效和稳定. 2. 数据库设计与程序设计的差异 有如下的一个系统: 面向对

数据库设计与性能优化

转自:http://blog.51cto.com/jimshu/1250066 一.数据库设计与性能优化--概述 jimshu关注2人评论5892人阅读2013-07-16 08:02:14 前言 我1998年第一次接触SQL Server 6.5 for Windows NT 4.0,当时的感觉就认为SQL Server只是一个功能强大的Excel文件.现在回想起来,当年抱着这样一种态度,我开发的那些应用程序应该是非常幼稚的,其性能可想而知.记得那时候随便查询一笔记录就要花费十几秒,已是司空见

高性能可扩展MySQL数据库设计及架构优化 电商项目

第1章 数据库开发规范的制定    俗话说:"没有规矩不成方圆".这一章,我们就先来制定数据库开发的各种规范,包括:数据库命名规范.数据库基本设计规范.数据库索引设计规范.数据库字段设计规范.SQL开发规范以及数据库操作规范.通过这些规范的制定可以指导并规范我们后续的开发工作,为我们以后的工作提供一个良好的基础.... 第2章 电商实例数据库结构设计    数据库开发规范的基础之上,如何更好的利用规范设计出易于维护和伸缩性良好的数据库结构,是我们的学习目的.这一章我们根据常用电商项目需

数据库设计优化

物理设计: 物理设计要做什么? 选择合适的数据库管理系统. 考虑因素:成本,业务场景,开发语言,功能,操作系统等. 数据库类型 成本 开发语言 支持系统 业务场景 Oracle 商业型 php,java,python等 windows/liunx系统 企业级 SQLServer 商业型 .NET,C#等 只支持windows系统 企业级 MySQL 开源型 php,java,python等 windows/liunx系统 中小型 PgSQL 开源型 php,java,python等 window