1.資料庫設計的步驟第一步:需求分析(收集信息)第二步:繪製 E-R 圖 (標示實體 ,找到實體的屬性第三步:將 E-R 圖轉換成資料庫模型圖第四步:將資料庫模型圖轉換成數據表2.如何繪製 E-R 圖矩形:實體橢圓形:屬性菱形:關係3.如何繪製資料庫模型圖PowerDesigner :選擇 Phys...
1.資料庫設計的步驟
第一步:需求分析(收集信息)
第二步:繪製 E-R 圖 (標示實體 ,找到實體的屬性
第三步:將 E-R 圖轉換成資料庫模型圖
第四步:將資料庫模型圖轉換成數據表
2.如何繪製 E-R 圖
矩形:實體
橢圓形:屬性
菱形:關係
3.如何繪製資料庫模型圖
PowerDesigner :選擇 PhysicalModel
如有有人不小心關掉了 Platter,對工具欄點擊右鍵,勾選 Platter 即可。
當我們將資料庫模型圖設計完畢後,可以通過菜單中的 database下的
GenerateDatabase來生成對應的 sql
4.三大範式規範資料庫設計
第一範式:保證每列的原子性,不可再被拆分
第二範式:在滿足第一範式的基礎上,一張表只能描述一件事情
第三範式:在滿足第二範式的基礎上,除了主鍵列之外其他列都要直接依賴於
要在規範化和性能之間取一個平衡
5.T-SQL語句回顧(其中[]中的表示可省略)
1.添加數據
insert [into] 表名 (列1,列2,...) values(值1,值2,...)
2.修改數據
update 表名 set 列1=值1,列2=值2,... where (條件)
3.查詢數據
select 列1,列2,... from 表名 where (條件) order by 列名
4.刪除數據
delete from 表名 where (條件)
6.使用SQL語句創建和刪除資料庫
1.創建資料庫([]表示可以省略,{}表示必需的部分,<>表示解釋說明)
語法:
create detabase 資料庫名
on [primary]
(
<數據文件參數> [,......n] [<文件組參數>]
)
[log on]
(
{<日誌文件參數> [,......n]}
)
數據文件的具體參數如下:
([name=邏輯文件名]
filename=物理文件名
[,size=大小]
[,maxsize={最大容量|unlimited}]
[,filengrowth=增長量]) [,.....n]
文件組的具體參數如下:
filegroup 文件組名 <文件參數> [,......n]
eg:
create database stuDB
on primary -- 預設就屬於primary文件組,可省略
(
/*--數據文件的具體描述--*/
name='stuDB_data', -- 主數據文件的邏輯名稱
filename='D:\stuDB_data.mdf', -- 主數據文件的物理名稱
size=5mb, --主數據文件的初始大小
maxsize=100mb, -- 主數據文件增長的最大值
filegrowth=15%--主數據文件的增長率
)
log on
(
/*--日誌文件的具體描述,各參數含義同上--*/
name='stuDB_log',
filename='D:\stuDB_log.ldf',
size=2mb,
filegrowth=1mb
)
2.刪除資料庫
語法:
drop database 資料庫名
那麼如何刪除這個資料庫呢,SQL Server將資料庫的清單存放在master系統資料庫的sysdatabases表中,只需要查看該表是否存在於該資料庫中就可以,這樣在創建資料庫的時候也可以先判斷,再創建
了,語句如下:
use master -- 設置當前資料庫為master,以便訪問sysdatabases表
go
if exists(select * from sysdatabases where name='stuDB')
drop database stuDBgo
7.使用SQL語句創建和刪除表
1.回顧一下我們SQL Server 中的數據類型(轉載自http://blog.sina.com.cn/zhanshiqi)
第一大類:整數數據
bit:bit數據類型代表0,1或NULL,就是表示true,false.占用1byte.
int:以4個位元組來存儲正負數.可存儲範圍為:-2^31至2^31-1.
smallint:以2個位元組來存儲正負數.存儲範圍為:-2^15至2^15-1
tinyint: 是最小的整數類型,僅用1位元組,範圍:0至此^8-1
第二大類:精確數值數據
numeric:表示的數字可以達到38位,存儲數據時所用的位元組數目會隨著使用權用位數的多少變化.
decimal:和numeric差不多
第三大類:近似浮點數值數據
float:用8個位元組來存儲數據.最多可為53位.範圍為:-1.79E+308至1.79E+308.
real:位數為24,用4個位元組,數字範圍:-3.04E+38至3.04E+38
第四大類:日期時間數據
datatime:表示時間範圍可以表示從1753/1/1至9999/12/31,時間可以表示到3.33/1000秒.使用8個位元組.
smalldatetime:表示時間範圍可以表示從1900/1/1至2079/12/31.使用4個位元組.
第五大類:字元串數據
char:長度是設定的,最短為1位元組,最長為8000個位元組.不足的長度會用空白補上.
varchar:長度也是設定的,最短為1位元組,最長為8000個位元組,尾部的空白會去掉.
text:長寬也是設定的,最長可以存放2G的數據.
第六大類:Unincode字元串數據
nchar:長度是設定的,最短為1位元組,最長為4000個位元組.不足的長度會用空白補上.儲存一個字元需要2個位元組.
nvarchar:長度是設定的,最短為1位元組,最長為4000個位元組.尾部的空白會去掉.儲存一個字元需要2個位元組.
ntext:長度是設定的,最短為1位元組,最長為2G.尾部的空白會去掉,儲存一個字元需要2個位元組.
第七大類:貨幣數據類型
money:記錄金額範圍為:-92233720368577.5808至92233720368577.5807.需要8 個位元組.
smallmoney:記錄金額範圍為:-214748.3648至214748.36487.需要4個位元組.
第八大類:標記數據
timestamp:該數據類型在每一個表中是唯一的!當表中的一個記錄更改時,該記錄的timestamp欄位會自動更新.
uniqueidentifier:用於識別資料庫裡面許多個表的唯一一個記錄.
第九大類:二進位碼字元串數據
binary:固定長度的二進位碼字元串欄位,最短為1,最長為8000.
varbinary:與binary差異為數據尾部是00時,varbinary會將其去掉
image:為可變長度的二進位碼字元串,最長2G.
2.創建表
語法:
create table 表名
(
列1 數據類型 列的特征,
列2 數據類型 列的特征,
......
)
**:資料庫中表的清單存放在資料庫的系統表sysobjects中.
use StuDBgo
if exists(select * from sysobjects where name='stuMarks')
drop table stuMarks
create table stuMarks
(
ExamNo int identity(1,1) primary key,
stuNo char(6) not null,
writtenExam int not null,
LabExam int not null
)
go
其中,列屬性"identity(起始值,遞增量)" 表示"ExamNo"列為自動編號, 也稱為標識列
3.刪除表
語法:
drop table 表名
use StuDBgo if exists(select * from sysobjects where name='stuMarks') drop table stuMarks
8.使用SQL語句創建和刪除約束
1.回顧一下SQL Server 中有關數據完整性
(1)實體完整性:唯一確定表中一行記錄
(2)域完整性:表中特定數據的有效性,以保不會輸入無效的數值
(3)引用完整性:插入或刪除記錄時,維護表之間定義的關係
2.添加約束
語法:
alter table 表名
add constraint 約束名 約束類型 具體的約束說明
上述語法表示修改某個表,併在其中添加某個約束.其中,約束名的命名規則推薦採用"約束類型_約束列的形式
eg:
為學號(StudentNo)添加主鍵約束,約束名推薦取名"PK_StudentNo;
...唯一約束=>"UQ_IdentityCard;
...預設約束=>"DF_Address;
...檢查約束=>"CK_BornDate;
...外鍵約束=>"FK_StudentNo.
--添加外鍵約束(主表Student和Result建立關係,關聯StudentNo) alter table Result add constraint FK_StudentNo foreign key(StudentNo) references Student(StudentNo) Go
--添加主鍵約束(將StudentNo作為主鍵) alter table Student add constraint PK_StudentNo primary key (Student) --添加唯一約束(身份證) alter table Student add constraint UQ_IdentityCard unique (IdentityCard) --添加預設約束(不填地址,則預設為"地址不詳") alter table Student add constraint DF_Address default('地址不詳') for Address --添加檢查約束 alter table Student add constraint CK_BornDate ckeck (BornDate>='1980-01-01')
3.刪除約束
語法:
alter table 表名
drop constraint 約束名
eg:
--Student表中地址列預設約束的語句如下 alter table Student drop constraint DF_Address