第一篇:數據庫課題設計總結
數據庫課題設計心得
——計科系03本(3):黃胡康
經過近2個月的時間,總算是做好了成績管理系統,自從確定了課題設計的題目后——學生成績管理系統,便開始了準備工作。從剛開始寫成績管理的需求分析、畫數據流圖、概要設計說明書以及數據庫字典。在把這些準備工作都做好了后,便開始了設計頁面與編程。說實話,剛開始覺得什么都不會寫,尤其是VB,因為VB已經學了一年多了,再說學VB那個時候又沒怎么學懂,基本的格式代碼都已經忘的差不多了。還得重新學VB
在整個設計過程中,通過各種渠道獲取資料。利用周末去大的書店查資料,把重要的東西記錄下來,也去圖書館借了一些相關的參考資料,同時還充分利用網上資源查一些資料。最后再綜合這些資料,結合VB、Access與SQL進行具體的操作。也可以說這是我第一次從開始設計到編程到最后完成自己獨立完成。在這過程中也遇到了很多難題,比如說,按學生的學號或名稱來查詢學生的成績時,就遇到了很多困難,先是怎樣把幾個表連接起來,再怎樣用DataGrid把一個學生的多條記錄顯示出來,怎樣求平均成績等等。通過查資料,仔細思考,把這些問題都解決了。但是,最后調試程序時,又發現程序缺少參照完整性,又重新回過去重寫代碼,可是寫了很久就是不能正常的運行,至少考慮了幾個小時,最后才發現代碼缺少了一部分條件,添加上后就可以正常運行了。第一次感受到了郁悶了半天后的喜悅心情。
從做課題設計的過程中,我的體會挺多的。只要有信心與耐心,沒有做不到的事情。因為在這個過程中寫代碼與調試的過程中確實需要耐心與信心,否則就不可能寫完整。我也知道該課題還存在很多的漏洞,也不是很完整。比如還應該添加上系科管理,班級管理等。由于時間的原因,也不能使之更完整。如果確實要給自己一個分數,我也不能給自己一個確切的多少分,但是我已經盡我的努力寫的了,同時我自己也在這個過程中也學到了很多知識。其實這已經使我很滿足了。分數也不能代表什么,我認為自己真正的學到了東西才是最重要的。
第二篇:數據庫設計知識點總結
數據庫設計 概念
1.1 描述
數據庫設計是指對于一個給定的應用環境,構造最優的數據庫模式,建立數據庫及其應用系統,使之能夠有效地存儲數據。
1.2 數據庫設計包含四部分
<1>需求分析 <2>概念結構設計 <3>邏輯結構設計 <4>物理結構設計
1.3 數據庫設計的原則
<1>明白自己的系統為OLTP系統還是OLAP系統 <2>降低對數據庫功能的依賴 <3>嚴格遵從數據庫三范式 <4>適當的考慮數據分塊
<5>盡量保證記錄的唯一標識存在 概念結構設計
2.1 E--R圖設計
E--R圖分為局部E--R圖和全局E--R圖 E--R模型基本符號 實體的表示:長方形
聯系的表示:菱形,如1:
1、1:n(m:1)、(m:n)屬性的表示:橢圓形
2.2 確定實體與屬性的原則:
<1>能作為屬性的盡量作為屬性而不要劃為實體
<2>作為屬性的數據元素與實體之間的聯系只能是1:n的聯系 <3>作為屬性的數據項不能再用其他屬性加以描述,也不能與其他實體或屬性發生聯系。邏輯結構設計
3.1 概念
是將基本E--R圖轉換為與選用DBMS產品所支持的數據模型相符合的邏輯結構的過程。
3.2 邏輯結構設計的過程分為
<1>將概念結構轉換為現有DBMS支持的關系、網狀或層次模型中的某一種數據模型 <2>從功能和性能要求上對轉換的模型進行評價,看它是否滿足用戶要求 <3>對數據模型進行優化
3.3 邏輯結構設計的原則
<1>一個實體型轉換為一個關系模型,實體的屬性就是關系的屬性,實體的鍵就是關系的鍵; <2>一個聯系轉換為一個關系模式,與該聯系相連的每個實體型的鍵以及聯系的屬性都轉換為關系的屬性。配置數據庫連接
4.1 步驟
1.打開powerdesigner,依次點擊:database--connect 2.點擊connect,打開對話窗口: 3.然后點擊Configuer按鈕,彈出數據源配置Configuer Data Connections對話框:
4.把頁簽切換到第三個Connetion Profiles頁簽中,如果連接存在,選中就行,如果不存在,點擊add Data Source數據庫圖標進行新增,彈出Connection Profile Definition對話框 此對話框中需要輸入以下信息
Connection profile name: 輸入數據庫連接文件名,它會自動加上后綴名.dcp;
Directory:數據庫連接文件存放路徑;可以任意;
Connetction type: 選擇JDBC;
DBMS type : 數據庫類型選擇Oracle;
Server name: 服務器名稱;也相當于對應PL/SQL登陸頁面的數據庫;
Database name: 數據庫名字;
User name: 登陸數據庫名字;
Password: 密碼
JDBC Driver class: 驅動類;只要下拉框選擇就行;
JDBC Driver Jar URL: 訪問的服務器路徑
JDBC connection files: 驅動包;需要指向ojdbc14.jar或者其他驅動的包的按鈕路徑;
5.點擊Test Connection 按鈕進行連接測試;
測試連接是否成功;成功會彈出成功或者失敗消息框,測試成功后。點擊確定按鈕,返回數據源配置Configuer Data Connections對話框,列表中就會多出一個.dcp文件,點擊確定即可。導出數據庫
5.1 步驟
導出數據庫表方法如下:
1.啟動PowerDesigner
2.菜單:File->Reverse Engineer->Database 出來New Physical Data Model對話框,DBMS選擇ORACLE Version 10g 選項,其他可以選擇默認值,點擊“確定”按鈕,彈出Database Reverse Engineering Options對話框:
3.然后在下拉框中選擇我們之前建立的數據源文件,并再次輸入數據庫User ID和password,點擊Connection即可連接至數據庫,并得取所有的數據庫對象,在此我們選擇所有的Table。
PowerDesigner 6.1 描述
Power Designer 是Sybase公司的CASE工具集,使用它可以方便地對管理信息系統進行分析設計,他幾乎包括了數據庫模型設計的全過程。利用Power Designer可以制作數據流程圖、概念數據模型、物理數據模型,還可以為數據倉庫制作結構模型,也能對團隊設計模型進行控制。他可以與許多流行的數據庫設計軟件,例如PowerBuilder,Delphi,VB等相配合使縮短開發時間和使系統設計更優化。
power designer是能進行數據庫設計的強大的軟件,是一款開發人員常用的數據庫建模工具。使用它可以分別從概念數據模型(Conceptual Data Model)和物理數據模型(Physical Data Model)兩個層次對數據庫進行設計。在這里,概念數據模型描述的是獨立于數據庫管理系統(DBMS)的實體定義和實體關系定義;物理數據模型是在概念數據模型的基礎上針對目標數據庫管理系統的具體化。導入數據庫
7.1 方法
將視圖切換到physical模型下,連接數據庫:單擊databasedatabase connection,彈出下面窗口,進行數據庫的連接。
鏈接完成后單擊toolsforward engineerschema generate,將彈出下面的窗口,單擊generate,即可將物理模型導入數據庫。實體
8.1 實體間的關系
實體間的三種關系:
1.標識關系(identifying relationship);
2.多對多關系(many-to-many relationship);
3.非標識關系(non-identifying relationship)。
標識關系是指把實體1中的主鍵作為實體2中的外鍵,且作為實體2的主鍵,非標識關系是指把實體1中的主鍵作為實體2中的外鍵,但不作為實體2的主鍵,8.2 概念
Erwin中的實體有兩種:獨立實體和依賴實體。實體被指定作為獨立實體,或依賴實體,取決于其鍵的獲得方式。獨立實體由方角盒來指定,獨立實體不依賴于模型中任何其它實體來標識;依賴實體被指定為圓角盒,依賴實體依存于模型中的其它實體,修改實體名
8.3 修改實體名稱
方法一:單擊實體名,按F2鍵可 以對實體名稱進行修改;
方法二:右鍵單擊欲進行修改的實體,選擇Entity Properties;
8.4 方法三:雙擊實體修改。列的增刪
方法一:右鍵單擊所選實體?≡馎tiue,在彈出的trbts窗口中添加é境蛐薷氖糶裕?方法二:單擊所選實體,按tb鍵也可以進行添加,刪除或修改操作。
第三篇:優化MySchool數據庫設計總結
優化MySchool數據庫設計總結
第一章 :數據庫設計
1,什么是數據庫設計
數據庫設計就是將數據庫中的數據實體以及這些數據實體之間的光系,進行規劃和結構化的過程。
2.數據庫的設計步驟
(1)收集信息
(2)標識實體
(3)標識每個實體需要存儲的詳細信息
(4)標識實體之間的關系 3.繪制E-R圖
實體,屬性,聯系,映射基數: 一對一 一對多 多對一 多對多
實體關系圖 矩形表示實體集
橢圓形表示屬性
菱形表示聯系集
直線用來連接屬性和實體集,也用來連接實體集和聯系集
4.繪制數據庫模型圖
(1),使用pdm工具新建一個數據庫模型圖
(2),添加實體
(3),添加數據列及相應的屬性
(4),添加實體之間的映射關系
5.規范數據庫設計三大范式:(1),第一范式
(確保每列的原子性,都是不可再分的最小數據單元)
(2),第二范式
(確保表中的每列都和主鍵相關,并且除了主鍵以外其他列都依賴該主鍵)
(3),第三范式
(確保每列都和主鍵直接相關,而不是間接相關)
第二章:數據庫的實現
1:
使用SQL語句創建和刪除數據庫
If exists(select * from sysodatabases where name=’ 數據庫名’)Drop database數據庫名
Create database 數據庫名
On primary
(name =’
’
Filename=’
’ Size= Maxsize= Filegrowth=)Log on(name=’
’ Filename=’
‘ Size= Filegrowth=)Go 1.2 :刪除數據庫
Drop database 數據庫名
2:
使用SQL語句創建和刪除表
If exists(select * from sysobjects where name=’表名’)表名
Create table 表名
(列名 屬性 非空 主鍵 自動增長)Go 2.2刪除表 Drop table 表名
3:
使用SQL語句創建和刪除約束
All table 表名
Add constraint 約束名 約束類型 具體的約束說明 1,主鍵約束(primary key 列名)2,非空約束(not null)3,唯一約束(unique 列名)4,檢查約束(check 列名)5,默認約束(default 列名)6,外鍵約束(foreign key 列名)
3.2:刪除約束
Alter table 表名 rop constraint 約束名
第三章:SQL編程
1.變量
1.1 局部變量聲明
Declare 變量名(前面加一@符號)類型 Set.賦值變量指定的數據常量 Select.賦值一般從表中查詢數據 1.2 全局變量系統自帶
2.輸出語句
print :輸出局部變量和字符串,必須是字符串類型。
Select:一般使用在查詢輸出。3.數據類型轉換
Cast(表達式 as 數據類型)Convert(數據類型[(長度)],表達式[,樣式])Cast()和convert()函數都可以將某種數據類型的表達式顯示的轉換為另一種數據類型,但是convert()函數可以通過第三個參數指定轉化后的字符樣式。不同的樣式顯示格式不同。4.邏輯控制語句
1,Begin –end 相當我們C#語言的大括號 2.if-else條件語句根據條件是否成立來確定程序的執行方向,需要與begin-end結合使用。
3.while.循環語句更具條件重復執行,一般在事情要多次執行的時候使用,break跳出循環,contiune跳過contiune后面語句,回到while第一條語句,準備下次循環。
語法: While(條件)Begin 語句塊 [break,continue] End 4.case多分支語句與C#開關結構類似 語法: Case When 條件1 then 結果1 When 條件2 then 結果 2 Else 其他結果 End 第四章 :高級查詢
1.子查詢
表連接查詢可以代替所有的子查詢,但是子查詢不可以代替所有的表查詢。2.in和not in子查詢
使用in關鍵字可以使主查詢匹配子查詢返回多個單列值
使用not in查詢取in查詢相反的結果 3.exists 和not exists子查詢
Exists關鍵字是檢測子查詢語句,如果子查詢結果非空返回真,否則返回假。
使用Not exists 查詢取exists查詢相反結果。
第六章:事務,視圖和索引 1.事務
事務是一種機制,一個操作序列,它包含了一組數據庫操作命令,并且把所有的命令作為一個整體一起向系統提交或撤銷操作請求,即這一組數據要么都執行要么都不執行。
事務四大屬性 1.原子性
(事務是一個完整的操作,事務的個元素是不可在分的)
2.一致性
(當事務完成時,數據必須處于一致狀態。)3.隔離性
(對數據進行操作時所有的并發事務是彼此隔離的)4.持久性
(事務成功完成后,它對于數據庫的改變是永久性的。)執行事務語法
Begin transaction(標記事務起始點)Commit transaction(提交事物)Rall back transaction(回滾事務)2.視圖
視圖是另一種查看數據庫一個表和多個表的方法,它是一種虛擬表,可以保證數據庫的安全性,結果更容易理解,獲得數據更容易,限制數據檢索更容易,維護應用程序更方便。
創建視圖
Create view 視圖名稱 As(select 語句)刪除視圖
Drop view 視圖名 查看視圖
Select 所需數據 from 視圖名稱 3.索引 3.1索引類型 1,唯一索引 2.主鍵索引 3.聚集索引 4.非聚集索引 5.復合索引 6.全文索引 3.2創建索引
Create [索引類型] index 索引名稱 On 表名(列名)[with fillfactor=x] 3.2 使用索引查詢數據 Select * from 表名 With(index =索引名稱)
3.3刪除索引
Drop index 表名.索引名稱 3.4 查看索引
3.4.1 用系統存儲過程sp-helpindex查看 Exec sp-helpindex 表名 3.4.2用視圖sys_indexes Select * from sys_indexes 第七章 :存儲過程
1.存儲過程的概念
存儲過程是數據庫管理系統中保存。預先編譯的并能實現某種功能的sql程序。他是數據庫中運用比較廣泛的一種數據對象,存儲過程可加快查詢速度,提高訪問數據速度,實現模塊化編程,保持一致性和提高安全性。
2.用戶定義存儲過程
1.不帶參數存儲過程語法 Create procedure 存儲過程名稱 As Sql語句 go 1.帶參數存儲過程語法
Create procedure 存儲過程名稱 @參數1 數據類型
@參數2 數據類型 output(output關鍵字代表輸出參數)As Sql語句 go
處理錯誤信息
用raiserror語句用來向用戶報告錯誤
第四篇:數據庫總結
數據庫總結:共三天的課程
數據庫的概念:數據庫是一組有序的數據的集合; 數據庫的作用:為了有效的管理數據; 數據類型:
一 字符串相關的類型:一般用于人名、大于2147483647(10位數)的數字、地址等字符信息
使用格式:字段名 char(存放字符的長度)
或者
字段名
varchar(存放字符的長度)Char:代表的是定長的字符串類型,定義了多長,就分配多長的存儲空間,只要不超過定義的長度,分配給char的空間長度就不會改變,余下的部分用空格代替;
Varchar:代表的是可變長度的字符串類型,定義的長度可以理解為是虛擬的空間,只要字符串的長度不超過定義的長度,那么varchar的分配空間長度就是字符串實際的長度,余下的部分自動消失; 二 數字相關的類型:一般用于工資、人數統計等方面; 使用格式:字段名
int/float/double 【此處不用定義字段的長度】 int :取值的范圍-2147483648~2147483647,后面可以設置主鍵及自增長;
float/double:用于帶有小數的數據定義 decimal:多用于金錢的數據 三 時間相關的數據類型:一般用于時間的統計,例如登錄時間、修改時間、退出時間等;
使用格式:字段名
date/time/datetime/timestamp 【此處不用定義字段的長度】,插入表的時候格式與字符串的插入格式一樣,都是用單引號插入
date:日期類型
格式:yyyy-MM-dd time:時間類型
格式:hh:mm:ss Datetime:日期時間
格式:yyyy-MM-dd hh:mm:ss Timestamp:時間戳
格式:yyyy-MM-dd hh:mm:ss 數據庫的操作:
一 查看所有數據庫:select databases;二 查看所有表:select tables;三 創建數據庫:create database 數據庫名稱;
use 數據庫名稱;
四 創建表:create table 表名(字段1
類型(長度)[約束], 字段2
類型(長度)[約束], 字段n
類型(長度)[約束])注:字段n的結尾處不需要用逗號分隔
五 刪除當前表/數據庫:drop table 表名/ 數據庫名;
六 向表中插入數據:insert into 表名(字段1,字段2,字段n)values(值1,值2,值n),(值1,值2,值n),(值1,值2,值n),(值1,值2,值n)...注:此處的插入數據可以用逗號隔開,想要插入幾條數據就插入幾個值。
七 查看當前表的值:select * from 表名
注:*是通配符,代表全部的意思,此處*還可以用表中的字段名代替,那么查看就是相應的字段名下的數據。
約束:
一 主鍵約束:primary key 代表的是唯
一、不重復,非空的約束 使用格式: 字段名
類型(長度)primary key 自增長:auto_increment 必須與主鍵約束一同使用,字段的類型是整型,插入數據的時候可以不用向設置自增長的字段添加數據,起始的默認數字是:1 二 唯一約束:unique 不可以重復,唯一 使用格式: 字段名
類型(長度)unique 注:空格是不可以作為字符串使用的,空格相當于null,如果向設置unique的字段內插入數據是存在【‘空格’、null、(‘’)】當中兩個或兩個以上的時候就會報錯【’null’是字符串,不是空】 三 非空約束:not null 插入數據時必須要為設置not null的字段插入數據,這個字段不能為空
使用格式: 字段名
類型(長度)not null 注:空格是不可以作為字符串使用的,空格相當于null,如果向設置not null的字段內插入數據是存在【‘空格’、null、(‘’)】當中一個或一個以上的時候就會報錯
四 默認約束:default 為字段設置默認值,當不為設置默認約束的字段插入數據是,系統自動將默認值賦予這個字段 使用格式: 字段名
類型(長度)default 值 五 檢查約束:check(檢查的內容)使用格式: 字段名
類型(長度)check(檢查的內容)注:在SQL語句中沒有實際的含義,但是需要會用
六 外鍵約束:foreign key 必須是另一個表的主鍵(唯一的),設置了外鍵的字段,受到關聯表中相應主鍵的字段的約束,當要為外鍵約束插入數據的時候,必須先為被關聯的表插入相應主鍵的數據;
使用格式: 創建表時候就設置外鍵約束
字段名
類型(長度),Foreign key(字段名)references 表名(對應主鍵的字段名)表已經創建完,插入外鍵約束
Alter table 表名 add constraint fk_f foreign key(要設置外鍵的字段名)references 被關聯的表名(被關聯的字段名);表的結構:
查看表結構:desc/describe 表名;修改表名:alter table 表名 rename 新表名 添加新字段:alter table 表名 add 字段名 類型(長度)修改字段:alter table 表名 change 舊字段 新字段 新字段類型(長度)刪除字段:alter table 表名 drop 字段名
記錄的操作:
一 插入記錄:insert into 表名(字段名1,字段名n)values(值1,值n)二 修改記錄:update 表名 set 字段名=值 where 條件
注:這里如果不加where條件,那么這個表的這個字段名下的數據全部賦值成為“值”
三 刪除記錄:delete from表名 where 條件
注:此處刪除的是表中的符合where條件的整條記錄 注意:使用delete和update的時候要千萬注意,必須要寫where條件語句,要不然就會將當前表中的所有數據改變,在想改回來的話會非常非常費勁!!!
四 查詢記錄:select 字段名1,字段名n from 表名 where 查詢條件 查詢去掉重復的值:關鍵字 distinct 格式:select distinct 字段名1,字段名n from 表名命別名/賦值表: 關鍵字 as 命別名:select 字段名 as ‘自定義名’
from 表名 賦值表:create table 新表名 as select * from 舊表名 3 查詢條件語句的范圍:in(等值判斷)/not in select 字段名1,字段名n from 表名 where 字段名
in/not in(值1,值n)4 模糊查詢:like
匹配標識符:’_’代表一個字符、%代表多個字符
Select 字段名 from 表名 where 字段名 like ‘_sth%’ 注:like后面的判斷值如果是數字的話要加單引號,例如想要查詢的條件是12345,可以這樣寫:’%3%’,單引號必須加 5 區間查詢:limit m,n
查詢從第m個記錄開始,一共n條記錄,這里的m指的是類似Java數組里的下標,計數從0開始
Limit m
查詢從頭開始的一共m條記錄
Select */字段名 from 表名 limit m,n 6 查詢值是否存在某段區間內:between 最大值 and 最小值(int 型的最大值、最小值)Select 字段名1,字段名n from 表名
where 字段名 between 最大值
and 最小值:
注意這里面的條件含有等于最大值和等于最小值
字段名 between 最大值 and 最小值= 字段名>=最小值 and 字段名<=最大值
邏輯運算符在此處可通用:<
<=
>
>=
=
!=
集合函數: 使用方法與Java中的方法的使用類似,注意的是函數名后面緊跟著(),中間不能有空格 一 符合條件的記錄的個數:countil
Select count(字段名)from 表名
where 查詢條件 二 求某個字段的值的總和:sum Select sum(字段名)from 表名
where 查詢條件 三 求某個字段的值的平均值:avg Select avg(字段名)from 表名
where 查詢條件 四 求某個字段的值的最大值:max Select max(字段名)from 表名
where 查詢條件 五 求某個字段的值的最大值:min Select min(字段名)from 表名
where 查詢條件
多表查詢:
笛卡爾積:select(字段1,字段n)from 表1,表n 自己想要的查詢(找到所有被查詢的表的相同的字段): Select(a.字段1,a.字段n,b.字段1,b.字段n)from 表名 as a,表名 as b where a.字段名=b.字段名;
聯合查詢:
左連接:select 字段名/* from 左表名
left join 右表名
on 左表名.字段名=右表名.字段名
查詢結果:左表全部顯示,右表與左表相同的字段名的部分顯示 右連接:select 字段名/* from 左表名
right join 右表名
on 左表名.字段名=右表名.字段名
查詢結果:右表全部顯示,左表與右表相同的字段名的部分顯示 內連接:select 字段名/* from 左表名
inner join 右表名
on 左表名.字段名=右表名.字段名
查詢結果:只有左表與右表相同的部分才顯示
全連接:select 字段名/* from 左表名
full join 右表名 查詢結果:’*’的結果是笛卡爾積
‘字段名’的結果是這個字段名下的笛卡爾積
函數:函數名與小括號之間不能有空格,字符串必須用單引號圈起來
一 求字符串長度:length Select
length(字符串)二 字符串的截取:substring(字符串,m)/(字符串,m,n)Select
substring(字符串,m)/(字符串,m,n)三 小寫轉大寫:upper Select
upper(字符串)四 大寫轉小寫:lower Select
lower(字符串)五 加密:MD5 Select
MD5(字符串)六 顯示現在的時間:now Select
now()
迷糊中: group by
order by 子查詢
第五篇:數據庫總結
數據庫老師畫的重點
數據庫:數據庫是長期存儲在計算機內、有組織、可共享的大數據集合。數據庫操縱功能:查詢select、插入insert、刪除delete、修改update 數據庫系統的特點:1數據結構化2數據的共享高,冗余度低,易擴充3數據獨
立性高4數據由DBMS統一管理和控制
數據模型的組成要素:數據結構、數據操作、完整性約束 概念模型:要出大體,畫圖 信息世界中的基本概念————
1、實體:客觀存在并可以相互區別的事物稱為實體
2、屬性:實體所具有的某一特性
3、碼(key):唯一標識實體的屬性集稱為碼
4、域(domain):域是一組具有相同數據類型的集合
5、實體型(entity type):具有相同屬性的實體必然具有共同的特征和性質。用實體名
及屬性名集合來抽象和刻畫同類實體,稱為實體型。
6、實體集(entity set):同一類型的實體的集合
7、聯系:在現實世界中,事物內部以及事物之間是有聯系的,這些聯系在信息世界中
反應為實體(型)內部的聯系和實體(型)之間的聯系。實體內部的聯系通常是指
組成實體的各屬性之間的聯系;實體之間的聯系通常是指不同實體集之間的聯系
最常用的數據模型:
1、層次模型(Hierarchical Model)
2、網狀模型(Network Model)
3、關系模型(Relational Model)
4、面向對象模型(Object Oriented Model)
5、對象關系模型(Object Relational Model)其中層次模型和網狀模型統稱為格式化模型
數據庫系統的三級模式結構:
1、模式(scheme):模式也稱邏輯模式,是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。他是數據庫系統模式結構的中間層,既不設計涉及數據的物理存儲細節和硬件環境,也與具體的應用程
序、所使用的應用開發工具及高級程序設計語言無關。
2、外模式(external schema):外模式也稱為子模式(subschema)或用戶模式,他是數
據庫用戶(包括應用程序員和最終用戶)能看見和使用
的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。
3、內模式(internal scheme):內模式也稱存儲模式(storage schema),一個數據庫只有
一個內模式。他是數據庫物理結構和存儲方式的描述,是
數據在數據庫內部的表達方式。數據庫的二級映像功能與數據庫獨立性————
為了能夠在系統內部實現這3個抽象層次的聯系和轉換,數據庫管理系統在這三個模式之間提供了兩層映像:
·外模式/模式 映像 ·模式/內模式 映像
正是這兩層映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性 關系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的關系,表示
為R(D1、D2、D3···Dn)
這里的的R表示關系的名字,n是關系的目或度(degree)關系中每個元素是關系中的元組,通常用t表示 當n=1時,稱關系為單元關系(unary relation),或一元關系 當n=2時,稱該關系為二元關系(binary relation)
關系是笛卡爾積的有限子集,所以關系也是一個二維表,表的每行對應一個元組,表的每列對應一個域。由于域可以相同,為了加以區分,必須對每列起一個名字,稱為屬性(attribute)。n目關系必有n個屬性。
若關系中的某一屬性組的值能夠唯一的標識一個元組,則稱該屬性組為候選碼(candidate key)
若一個關系有多個候選碼,則選定其中一個為主碼(primary key)候選碼的諸屬性稱為主屬性(prime attribute)。不包含在任何候選碼中的屬性稱為非主屬性(non-prime attribute)或非碼屬性(non-key attribute)P46 沒有搞明白干嘛使得!!!!!!!!!!!
關系的三類完整性約束:實體完整性、參照完整性、用戶定義的完整性 實體完整性和參照完整性被稱作關系的兩個不變性
1、實體完整性(entity integrity):主碼中的屬性即主屬性不能取空值
2、參照完整性(referential integrity):
若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的的主碼K相對應(基
本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為:
·或者取空值(F的每個屬性值均為空值)·或者等于S中某個元組的主碼值
SQL(Structured Query Language),即結構化查詢語言,是關系數據庫的標準語言。SQL 的特點:
1、綜合統一
2、高度非過程化
3、面向集合的操作方式
4、以同一種語法結構提供多種使用方式
5、語言簡潔、易學易用 SQL的動詞:
數據查詢:select 數據定義:create、drop、alter(房間)修改表
數據操縱:insert、update(家具)修改數據、delete 數據控制:grant、revoke
繪制ER圖————
在ER圖中有如下四個成分:
矩形框:表示實體,在框中記入實體名。菱形框:表示聯系,在框中記入聯系名。
橢圓形框:表示實體或聯系的屬性,將屬性名記入框中。對于主屬性名,則在其名稱下
劃一下劃線。
連線:實體與屬性之間;實體與聯系之間;聯系與屬性之間用直線相連,并在直線上
標注聯系的類型。(對于一對一聯系,要在兩個實體連線方向各寫1; 對于一對
多聯系,要在一的一方寫1,多的一方寫N;對于多對多關系,則要在兩個實體
連線方向各寫N,M。
基本表是本身獨立存在的表,在SQL中一個關系就對應一個基本表。一個(或多個)基本表對應一個存儲文件,一個表可以帶若干索引,索引也可以放在存儲文件中。存儲文件的邏輯結構組成了關系數據庫的內模式。存儲文件的物理結構是任意的,對用戶是透明的。
視圖是從一個或幾個基本表導出的表。它本身不獨立存儲在數據庫中,即數據庫中只存放視圖的定義而不存放視圖對應的數據。這些數據仍存放在導出視圖的基本表中,因此視圖是一個虛表。視圖在概念上與基本表等同,用戶可以在視圖上再定義視圖。
基本表的定義、刪除與修改:
1、定義基本表:create table ***()
2、定義主鍵:Primary key == not null(中間不用連接符號)unique
3、定義外碼的語句:foreign key(某個字段)references 某表(某字段)
4、定義主碼語句:primary key(***,***)
5、修改基本表:alter table 某表名 add 列名<數據類型>[完整性約束]
drop <完整性約束名>(字段名)
alter column<列名><數據類型>
6、刪除表:drop table 表名[restrict | cascade級聯刪除]
7、建立索引:create [unique] [clustered] index 索引名
on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引
·unique表明此索引的每一個索引值只對應唯一的數據記錄 ·用戶可以在最經常查詢的列上建立聚簇索引以提高查詢效率 ·在一個基本表上只能建立一個聚簇索引
·建立局促索引后,更新該索引列上的數據時,往往導致表中記
錄的物理順序的額變更,代價較大,因此對于經常更新的列不
宜建立聚簇索引
8、刪除索引:drop index <索引名>
上機的時候不太一樣:drop index 表名。索引名字
9、數據的查詢:
select [all | distinct] <目標列表達式>,······ from 表名或者視圖名,··· where 條件表達式
group by 列名1 [having 條件表達式] order by 列名2 [asc | desc] ·如果有group by 子句,則結果按“列名1”的值進行分組,該屬性列值相
等的元組為一個組。通常會在每組中作用聚集函數。如果group by 子句帶
having短語,則只有滿足指定條件的組才予以輸出。
·如果有order by 子句,則結果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower
(Sdept)Department
from Student
lower表示小寫
常用的查詢條件————
比
較:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比較運算符
確定范圍:between and,not between and 確定集合:in,not in 字符匹配:like,not like 空
值:is null,is not null 多重條件(邏輯運算):and,or,not
例子————
·select Sname,Sage
from Student
where Sdept(not)in(‘cs’,‘ma’,‘is’)
字符匹配:[not] like ‘字符串’[escape‘換嗎字符’] 百分號表示任意長度、下劃線表
示任意單個字符 聚集函數————
count([distinct | all] *)
統計元組個數 count([distinct| all] 列名)
統計一列中值的個數 sum([distinct| all] 列名)
計算一列值的總和(此列必須是數值型)avg([distinct| all] 列名)
計算一列的平局值(此列必須是數值型)max([distinct| all] 列名)
求一列中的最大值 min ·如果指定distinct短語,則表示在計算時要取消指定列中的重復值。如果不指定distinct
短語或者指定all短語(all為缺省值),則表示不取消重復。
·注意在聚集函數遇到空值時,除count(*)外,都跳過空值而只處理非空值。·注意where子句中不能用聚集函數作為條件表達式
group by子句————
where 子句與having 短語的區別在于作用對象不同。Where 子句作用對象作用于基本表或試圖,從中選擇條件的元組。Having短語作用于組,從中選擇滿足條件的組。
例子:select Sno from SC
group by Sno having count(*)>3 查詢了選修3門以上課程的學生學號 鏈接查詢—————— 例子:
非自然鏈接
·select Student.*,SC.*
from Student,SC
Where Student.Sno=SC.Sno
自然鏈接
·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno
自身鏈接
·select FIRST.Cno,SECOND.Cpno
from Course FIRST,Course SECOND
where FIRST.Cpno=SECOND.Cpno
外連接
·select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student left outer join SC
on Student.Sno=SC.Sno ·左外鏈接列出左邊關系中所有的元組,右外連接列出右邊關系中的所有元組
嵌套查詢
·select Sname from Student
where Sno in(select Sno from SC where Cno=‘2’)
·找出每個學生超過他選修課程平均成績的課程號
Select Sno,Cno From SC x Where Grade >=(select avg(Grade)
From SC y Where y.Sno=x.Sno)
授權————
Grant 權限,····· On 對象類型 對象名,····· To 用戶,·····
[with grant option]只一句表示權限的傳遞
例子: ·Grant all privileges
On Student,Course
To U1,U2
·grant update(Sno),select
on Student
to u4
·revoke update(Sno)
on table Student
from u4
一個滿足BCNF的關系模式有:
·所有非主屬性對每一個碼都是完全函數依賴
3NF 編輯
3NF,即第三范式是要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。滿足第三范式(3NF)必須先滿足第二范式(2NF)
2NF(第二范式)
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。