新聞中心
隨著IT技術(shù)的不斷發(fā)展,數(shù)據(jù)量的不斷增加,如何有效地存儲這些龐大的數(shù)據(jù)成為了企業(yè)面臨的重要問題。數(shù)據(jù)庫作為一個(gè)存儲和管理企業(yè)數(shù)據(jù)的重要工具,發(fā)揮著極為重要的作用,因此對其進(jìn)行優(yōu)化和重構(gòu)尤為重要。本文將闡述數(shù)據(jù)庫重構(gòu)的概念、目的及方法,并探討其對數(shù)據(jù)存儲的提升作用。

一、什么是數(shù)據(jù)庫重構(gòu)?
數(shù)據(jù)庫重構(gòu)是指對現(xiàn)有的數(shù)據(jù)庫進(jìn)行優(yōu)化和改進(jìn),以減少資源的浪費(fèi)、提升數(shù)據(jù)庫的性能及安全性。數(shù)據(jù)庫重構(gòu)是一種全面的優(yōu)化技術(shù),可以通過對數(shù)據(jù)庫的物理結(jié)構(gòu)、邏輯結(jié)構(gòu)和數(shù)據(jù)的效率進(jìn)行優(yōu)化,使其更加高效的管理數(shù)據(jù)。
在進(jìn)行重構(gòu)時(shí),需要考慮到數(shù)據(jù)類型、數(shù)據(jù)的頻繁更新、查詢效率,同時(shí)還要考慮到數(shù)據(jù)本身的特點(diǎn),如存儲容量、結(jié)構(gòu)和訪問模式等因素。
二、數(shù)據(jù)庫重構(gòu)的目的
1.提升數(shù)據(jù)存儲效率
大多數(shù)企業(yè)在應(yīng)對增加的數(shù)據(jù)量時(shí),往往采用增加存儲設(shè)備的方法,但其實(shí)通過數(shù)據(jù)庫重構(gòu)的方式可以大幅提升數(shù)據(jù)庫的存儲效率。重構(gòu)可以消除重復(fù)數(shù)據(jù)、優(yōu)化數(shù)據(jù)結(jié)構(gòu),使得數(shù)據(jù)存儲更加緊湊,因而能夠更加高效地管理海量數(shù)據(jù)。
2.增強(qiáng)數(shù)據(jù)安全性
數(shù)據(jù)庫重構(gòu)可以有效地保護(hù)數(shù)據(jù)安全。通過重構(gòu),可以剔除掉冗余數(shù)據(jù),防止出現(xiàn)數(shù)據(jù)錯(cuò)誤和泄露。同時(shí),可加強(qiáng)數(shù)據(jù)庫的安全性,防止出現(xiàn)數(shù)據(jù)被攻擊、入侵等情況。
3.提升數(shù)據(jù)處理效率
數(shù)據(jù)庫重構(gòu)可以大幅提升數(shù)據(jù)庫的處理效率,這對于企業(yè)來說尤為重要。通過對數(shù)據(jù)庫結(jié)構(gòu)和存儲方式進(jìn)行優(yōu)化,可以提高數(shù)據(jù)處理的速度,使企業(yè)的數(shù)據(jù)更加穩(wěn)定和快速的運(yùn)行。
三、數(shù)據(jù)庫重構(gòu)的方法
1.對數(shù)據(jù)庫邏輯結(jié)構(gòu)進(jìn)行改進(jìn)
對于現(xiàn)有的數(shù)據(jù)庫,邏輯結(jié)構(gòu)通常是不完備的。為了提高數(shù)據(jù)處理效率,數(shù)據(jù)庫重構(gòu)的之一步就是改進(jìn)數(shù)據(jù)庫的邏輯結(jié)構(gòu),使其更加高效。
2.對數(shù)據(jù)庫物理結(jié)構(gòu)進(jìn)行改進(jìn)
數(shù)據(jù)庫物理結(jié)構(gòu)的改進(jìn)通常包括以下幾個(gè)方面:
a.文件系統(tǒng)
文件系統(tǒng)是影響數(shù)據(jù)庫性能的關(guān)鍵因素之一。通過進(jìn)行文件系統(tǒng)的優(yōu)化,可以讓數(shù)據(jù)庫更加高效地運(yùn)行。
b.物理數(shù)據(jù)結(jié)構(gòu)
物理數(shù)據(jù)結(jié)構(gòu)是存儲數(shù)據(jù)的一種方式,數(shù)據(jù)庫重構(gòu)可以通過改進(jìn)物理數(shù)據(jù)結(jié)構(gòu)來達(dá)到優(yōu)化的效果。
c.緩存技術(shù)
緩存技術(shù)是數(shù)據(jù)庫中的重要一個(gè)方面,對于大規(guī)模數(shù)據(jù)的計(jì)算,緩存技術(shù)的使用能夠大幅提高數(shù)據(jù)的處理速度。
3.對數(shù)據(jù)本身進(jìn)行優(yōu)化
除了對結(jié)構(gòu)的優(yōu)化,重構(gòu)也需要對數(shù)據(jù)本身進(jìn)行優(yōu)化。例如,可以通過數(shù)據(jù)分片的方式來提高數(shù)據(jù)查詢的效率。
四、
數(shù)據(jù)庫是企業(yè)中極為重要的一部分。通過對其進(jìn)行重構(gòu),能夠大幅提高數(shù)據(jù)庫的性能和安全性,同時(shí)也能夠讓企業(yè)更加高效地管理海量數(shù)據(jù)。因此,較為理性的互聯(lián)網(wǎng)公司一定要注重?cái)?shù)據(jù)庫重構(gòu)這個(gè)問題,盡量使自己在數(shù)據(jù)庫方面更加高效,以獲得更好的長期發(fā)展。
相關(guān)問題拓展閱讀:
- 數(shù)據(jù)庫如何創(chuàng)建視圖
- 什么是數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)?
數(shù)據(jù)庫如何創(chuàng)建視圖
視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。
對其中所引用的基礎(chǔ)表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當(dāng)前或其它數(shù)據(jù)庫的一個(gè)或多個(gè)表,或者其它視圖。通過視圖進(jìn)行查詢沒有任何限制,通過它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。
視圖是存儲在數(shù)據(jù)庫中的查詢的SQL 語句,它主要出于兩種原因:安全原因, 視圖可以隱藏一些數(shù)據(jù),如:社會保險(xiǎn)基金表,仿早可以用視圖只顯示姓名,地址,而不顯示社會保險(xiǎn)號和工資數(shù)等,另一原因是可使復(fù)雜的查詢易于理解和使用。這個(gè)視圖就像一個(gè)“窗口”,從中只能看到你想看的數(shù)據(jù)列。這意味著你可以在這個(gè)視圖上使用SELECT *,而你看到的將是你在視圖定義里給出的那些數(shù)據(jù)列:
既然視圖的定義是基于基本表的,哪為什么還要定義視圖呢?這是因?yàn)楹侠淼厥褂靡晥D能夠帶來許多好處:
1、 視圖能簡化用戶操作
視圖機(jī)制使用戶可以將注意力集中在所關(guān)心地?cái)?shù)據(jù)上。如果這些數(shù)據(jù)不是直接來自基本表,則可以通過定義視圖,使數(shù)據(jù)庫看起來結(jié)構(gòu)簡單、清晰,并且可以簡化用戶的的數(shù)據(jù)查詢操作。例如,那些定義了若干張表連接的視圖,就將表與表之間的連接操作對用戶隱藏起來了。換句話說,用戶所作的只是對一個(gè)虛表的簡單查詢,而這個(gè)虛表是怎樣得來的,用戶無需了解。
2、 視圖使用戶能以多種角度看待同一數(shù)據(jù)
視圖機(jī)制能使不同的用戶以不同的方式看待同一數(shù)據(jù),當(dāng)許多不同種類的用戶共享同一個(gè)數(shù)據(jù)庫時(shí),這種靈活性是非常必要的。
3、 視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性
數(shù)據(jù)的物理獨(dú)立性是指用戶的應(yīng)用程序不依賴于數(shù)據(jù)庫的物理結(jié)構(gòu)。數(shù)據(jù)的邏輯獨(dú)立性是指當(dāng)數(shù)據(jù)庫重構(gòu)造時(shí),如增加新的關(guān)系或?qū)υ械年P(guān)系增加新的字段,用戶的應(yīng)用程序不會受影響。層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫一般能較好地支持?jǐn)?shù)據(jù)的物理獨(dú)立性,而對于邏輯獨(dú)立性則不能完全的支持。
在關(guān)許數(shù)據(jù)庫中,數(shù)據(jù)庫的重構(gòu)造往往是不可避免的。重構(gòu)數(shù)據(jù)庫最常見的是將一個(gè)基本表“垂直”地分成多個(gè)基本表。例如:將學(xué)生關(guān)系Student(Sno,Sname,Ssex,Sage,Sdept),
分為SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)兩個(gè)關(guān)系。這時(shí)原表Student為SX表和SY表自然連接的結(jié)果。如果建立一個(gè)視圖Student:
view plain copy
CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)AS SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept FROM SX,SY WHERE SX.Sno=SY.Sno;
這樣盡管數(shù)據(jù)庫的邏輯結(jié)構(gòu)改變了(變?yōu)镾X和SY兩個(gè)表了),但應(yīng)用程序不必修改,因?yàn)樾陆⒌囊晥D定義為用戶原來的關(guān)系,使用戶的外模式保持不變,用戶的應(yīng)用程序通過視圖仍然能夠查找數(shù)據(jù)。
當(dāng)然,視圖只能在一定程度上提供數(shù)據(jù)的邏輯獨(dú)立,比如由于視圖的更新是有條件的,因此應(yīng)用程序中修改數(shù)據(jù)的語句可能仍會因?yàn)榛颈順?gòu)造的改變而改變。
4、視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
有了視圖機(jī)制,就可以在設(shè)計(jì)數(shù)據(jù)庫應(yīng)用系統(tǒng)時(shí),對不同的用戶定義不同的視圖,使機(jī)密數(shù)據(jù)不出現(xiàn)在不應(yīng)該看到這些數(shù)據(jù)的用戶視圖上。這樣視圖機(jī)制就自動(dòng)提供了對機(jī)密數(shù)據(jù)的安全保護(hù)功能。例如,Student表涉及全校15個(gè)院系學(xué)生數(shù)據(jù),可以在其上定義15個(gè)視圖,每個(gè)視圖只包含一個(gè)院系的學(xué)生數(shù)據(jù),并只允許每個(gè)院系的主任查詢和修改本原系學(xué)生視圖。
5、備跡雀適當(dāng)?shù)睦靡晥D可以更清晰地表達(dá)查詢
例如經(jīng)常需要執(zhí)行這樣的查詢“對每個(gè)學(xué)生找出他獲得更高成績的課程號”??梢韵榷x一個(gè)視圖,求出每個(gè)同學(xué)獲得的更高成績:
view plain copy
CREATE VIEW VMGRADE
AS
SELECT Sno,MAX(Grade) Mgrade
FROM SC
GROUP BY Sno
然后用如下的查詢語句完成查詢:
view plain 州陸copy
SELECT SC.Sno,Cno FROM SC,VMGRADE WHERE SC.Sno = VMGRADE.Sno AND SC.Grade = VMGRADE.Mgrade;
二、數(shù)據(jù)準(zhǔn)備
1、員工表
view plain copy
CREATE TABLE t_employee(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME CHAR(30) NOT NULL,
SEX CHAR(2) NOT NULL,
AGE INT NOT NULL,
DEPARTMENT CHAR(10) NOT NULL,
SALARY INT NOT NULL,
HOME CHAR(30),
MARRY CHAR(2) NOT NULL DEFAULT ‘否’,
HOBBY CHAR(30)
);
插入數(shù)據(jù):
view plain copy
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’小紅’,’女’,20,’人事部’,’4000′,’廣東’,’否’,’網(wǎng)球’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’明日’,’女’,21,’人事部’,’9000′,’北京’,’否’,’網(wǎng)球’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’天天’,’男’,22,’研發(fā)部’,’8000′,’上?!?’否’,’音樂’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’大大’,’女’,23,’研發(fā)部’,’9000′,’重慶’,’否’,’無’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’王下’,’女’,24,’研發(fā)部’,’9000′,’四川’,’是’,’足球’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’無名’,’男’,25,’銷售部’,’6000′,’福建’,’否’,’游戲’);
INSERT INTO learning.t_employee(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’不知道’,’女’,26,’銷售部’,’5000′,’山西’,’否’,’籃球’);
插入的結(jié)果:
請點(diǎn)擊輸入圖片描述
然后再定義一張員工信息表:
view plain copy
create TABLE t_employee_detail(
ID INT PRIMARY KEY,
POS CHAR(10) NOT NULL,
EXPERENCE CHAR(10) NOT NULL,
CONSTRAINT `FK_ID` FOREIGN KEY(ID) REFERENCES t_employee(ID)
)
插入如下:
view plain copy
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(1,’人事管理’,’工作二年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(2,’人事招聘’,’工作二年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(3,’初級工程師’,’工作一年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(4,’中級工程師’,’工作二年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(5,’高級工程師’,’工作三年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(6,’銷售代表’,’工作二年’);
INSERT INTO t_employee_detail(ID,POS,EXPERENCE) VALUES(7,’銷售員’,’工作一年’);
內(nèi)容:
請點(diǎn)擊輸入圖片描述
三、使用案例
1. 語法
CREATE VIEW view_name AS select_statement CHECK OPTION>
通過該語句可以創(chuàng)建視圖,若給定了,則表示當(dāng)已具有同名的視圖時(shí),將覆蓋原視圖。select_statement是一個(gè)查詢語句,這個(gè)查詢語句可從表或其它的視圖中查 詢。視圖屬于數(shù)據(jù)庫,因此需要指定數(shù)據(jù)庫的名稱,若未指定時(shí),表示在當(dāng)前的數(shù)據(jù)庫創(chuàng)建新視圖。
表和數(shù)據(jù)庫共享數(shù)據(jù)庫中相同的名稱空間,因此,數(shù)據(jù)庫不能包含相同名稱的表和視圖,并且,視圖的列名也不能重復(fù)。
在創(chuàng)建視圖前應(yīng)先看看是否有權(quán)限:
view plain copy
SELECT SELECT_priv,create_view_priv from mysql.user WHERE user=’root’
Y表示有創(chuàng)建的權(quán)限
請點(diǎn)擊輸入圖片描述
2、單表上創(chuàng)建視圖
在員工表是創(chuàng)建視圖
view plain copy
CREATE VIEW V_VIEW1(ID, NAME, SEX, AGE,DEPARTMENT) AS SELECT ID, NAME, SEX, AGE,DEPARTMENT FROM learning.t_employee;
然后是顯示內(nèi)容:
view plain copy
SELECT * FROM V_VIEW1
請點(diǎn)擊輸入圖片描述
3、多表上創(chuàng)建視圖
view plain copy
CREATE VIEW V_VIEW2(ID, NAME, SEX, AGE,DEPARTMENT,POS,EXPERENCE) AS SELECT a.ID, a.NAME, a.SEX, a.AGE,a.DEPARTMENT,b.POS,b.EXPERENCE FROM learning.t_employee a,learning.t_employee_detail b WHERE a.ID=b.ID;
顯示結(jié)果
view plain copy
SELECT * FROM V_VIEW2
請點(diǎn)擊輸入圖片描述
4、查看視圖
(1)DESCRIBE 命令
view plain copy
DESCRIBE V_VIEW2
請點(diǎn)擊輸入圖片描述
(2)SHOW TABLE STATUS
view plain copy
show TABLE status LIKE ‘V_VIEW2’
請點(diǎn)擊輸入圖片描述
(3)SHOW CREATE view命令
view plain copy
show CREATE view V_VIEW2
請點(diǎn)擊輸入圖片描述
5、修改視圖
(1)CREATE OR REPLACE命令
view plain copy
CREATE OR REPLACE VIEW V_VIEW1(ID, NAME, SEX) AS SELECT ID, NAME, SEX FROM learning.t_employee;
請點(diǎn)擊輸入圖片描述
(2) ALTER 命令
view plain copy
ALTER VIEW V_VIEW1(ID, NAME) AS SELECT ID, NAME FROM learning.t_employee;
SELECT * FROM learning.v_view1
請點(diǎn)擊輸入圖片描述
6、更新視圖
在MySQL中,更新視圖是指通過視圖來插入(INSERT)、更新(UPDATE)和刪除(DELETE)表中的數(shù)據(jù)。因?yàn)橐晥D是一個(gè)虛擬表,其中沒有數(shù)據(jù),所以通過視圖更新時(shí),都是轉(zhuǎn)換到基本表來更新。
更新視圖時(shí),只能更新權(quán)限范圍內(nèi)的數(shù)據(jù)。超出了范圍,就不能更新。
更新前:
請點(diǎn)擊輸入圖片描述
更新后:
view plain copy
UPDATE V_VIEW2 SET POS=’高級工程師’ WHERE NAME=’天天’
請點(diǎn)擊輸入圖片描述
對應(yīng) 的真實(shí)表上的數(shù)據(jù)也發(fā)生改變 了
view plain copy
SELECT * FROM learning.t_employee_detail WHERE t_employee_detail.ID=3
請點(diǎn)擊輸入圖片描述
不可更新的視圖:
某些視圖是可更新的。也就是說,可以在諸如UPDATE、DELETE或INSERT等語句中使用它們,以更新基表的內(nèi)容。對于可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關(guān)系。還有一些特定的其他結(jié)構(gòu),這類結(jié)構(gòu)會使得視圖不可更新。更具體地講,如果視圖包含下述結(jié)構(gòu)中的任何一種,那么它就是不可更新的:
· 聚合函數(shù)(SUM(), MIN(), MAX(), COUNT()等)。
· DISTINCT
· GROUP BY
· HAVING
· UNION或UNION ALL
· 位于選擇列表中的子查詢
· Join
· FROM子句中的不可更新視圖
· WHERE子句中的子查詢,引用FROM子句中的表。
· 僅引用文字值(在該情況下,沒有要更新的基本表)。
· ALGORITHM = TEMPTABLE(使用臨時(shí)表總會使視圖成為不可更新的)。
注意
視圖中雖然可以更新數(shù)據(jù),但是有很多的限制。一般情況下,更好將視圖作為查詢數(shù)據(jù)的虛擬表,而不要通過視圖更新數(shù)據(jù)。因?yàn)?,使用視圖更新數(shù)據(jù)時(shí),如果沒有全面考慮在視圖中更新數(shù)據(jù)的限制,就可能會造成數(shù)據(jù)更新失敗。
CASCADED和LOCAL能不能決定視圖是否能更新?
WITH CHECK OPTION能不能決定視圖是否能更新?這兩個(gè)參數(shù)的基本定義如下:
LOCAL參數(shù)表示更新視圖時(shí)只要滿足該視圖本身定義的條件即可。
CASCADED參數(shù)表示更新視圖時(shí)需要滿足所有相關(guān)視圖和表的條件。沒有指明時(shí),該參數(shù)為默認(rèn)值。
With check option的用法:
(with check option對于沒有where條件的視圖不起作用的)
view plain copy
CREATE VIEW V_VIEW3(ID, NAME,SEX,AGE,DEPARTMENT,SALARY, HOME, MARRY, HOBBY) AS SELECT ID, NAME, SEX,AGE,DEPARTMENT,SALARY,HOME,MARRY,HOBBY FROM learning.t_employee WHERE DEPARTMENT=’人事部’ WITH LOCAL CHECK OPTION;
表示只限定插入部門為人事部的人。
請點(diǎn)擊輸入圖片描述
然后插入一條:
view plain copy
INSERT INTO learning.V_VIEW3(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’會會會會’,’女’,20,’人事部’,’4500′,’廣東’,’否’,’網(wǎng)球’);
看下結(jié)果:
view plain copy
SELECT * FROM learning.V_VIEW3
請點(diǎn)擊輸入圖片描述
同時(shí)看真實(shí)表中的數(shù)據(jù):
請點(diǎn)擊輸入圖片描述
再來插入一條:
view plain copy
INSERT INTO learning.V_VIEW3(ID, NAME, SEX, AGE,DEPARTMENT, SALARY, HOME, MARRY, HOBBY) VALUES(NULL,’qqqqvasvas’,’女’,20,’研發(fā)部’,’4500′,’上?!?’否’,’網(wǎng)球’);
請點(diǎn)擊輸入圖片描述
結(jié)果顯示插入失敗
對于with check option用法,總結(jié)如下:
通過有with check option選項(xiàng)的視圖操作基表(只是面對單表,對連接多表的視圖正在尋找答案),有以下結(jié)論: 插入后的數(shù)據(jù),通過視圖能夠查詢出來就符合WITH CHECK OPTION 否則就不符合;
首先視圖只操作它可以查詢出來的數(shù)據(jù),對于它查詢不出的數(shù)據(jù),即使基表有,也不可以通過視圖來操作。
1.對于update,有with check option,要保證update后,數(shù)據(jù)要被視圖查詢出來
2.對于delete,有無with check option都一樣
4.對于insert,有with check option,要保證insert后,數(shù)據(jù)要被視圖查詢出來
對于沒有where 子句的視圖,使用with check option是多余的
7、刪除視圖
view plain copy
DROP VIEW IF EXISTS 視圖名
等
創(chuàng)建視圖的理想步驟:
一般來說,視圖創(chuàng)建可以分為五步走:
之一步:先考慮select語句的編寫。我們知道,視圖其實(shí)就是一個(gè)select語句的,所以,我們建立視圖的之一步,就是考慮這個(gè)select語句的如何編寫。這個(gè)select語句編寫的是否合理,執(zhí)行效率的高低直接影響著這個(gè)視圖的性能,在Select語句中,可能還會有格式的控制、內(nèi)容的編排等等。如在Select語句中,可以把一些字段合并成一個(gè)字段;也可以把相關(guān)的內(nèi)容進(jìn)行倒置等等。這些功能都是Select語句完成的。所以可以這么說,Select語句的編寫是視圖建立的基礎(chǔ)。
第二步:對這個(gè)Select語句進(jìn)行測試。當(dāng)我們編寫好Select語句之后,就需要在數(shù)據(jù)庫中執(zhí)行這條語句,看其能否查詢到我們想要的值。在對
Select語句進(jìn)行測試的時(shí)候,需要注意一個(gè)問題,有時(shí)候Select查詢語句可以查到準(zhǔn)確的數(shù)據(jù),但是在以這條語句建立視圖的時(shí)候,可能就會通不過。
如在一些表之間的連接查詢的時(shí)候,如果兩個(gè)表中有個(gè)字段名相同,是可以的。因?yàn)樗麄兂俗侄蚊种?,還有表名一起來定義這個(gè)字段。如A.name與
B.name。這是不算重名的。但是,若在建立視圖的時(shí)候,這就會被認(rèn)為是重復(fù)的列明,需要對其中的一個(gè)列名進(jìn)行重定義。這一點(diǎn)在數(shù)據(jù)庫視圖建立的時(shí)候,
要特別的注意。
第三步:考慮查詢結(jié)果的準(zhǔn)確性。通過查詢語句把我們想要的結(jié)果查詢出來后,我們就需要看看這個(gè)液稿肆結(jié)果是否滿足我們的需要。在這個(gè)過程中,我們主要注意兩
點(diǎn)。一是形式字段是否齊全。在一些應(yīng)用系統(tǒng)中,若數(shù)據(jù)庫的視圖要能夠被前臺的
應(yīng)用程序
調(diào)用的話,則必須包含一些形式字段。如筆者以前在設(shè)計(jì)一個(gè)
ERP系統(tǒng)
的時(shí)候,若前臺系統(tǒng)要調(diào)用數(shù)據(jù)庫中的視圖的時(shí)候,必須包含記錄更新時(shí)間、更新者、記錄創(chuàng)建時(shí)間、創(chuàng)建者等相關(guān)信息。若缺乏這些信息的話,則前臺
調(diào)用這張視圖的時(shí)候,就會出現(xiàn)錯(cuò)誤。故在考慮查詢結(jié)果準(zhǔn)確性的問題的時(shí)候,就要考慮到前臺應(yīng)用程序的需要,看看這些形式字段是否齊全。二是實(shí)體內(nèi)容的完整
若字段內(nèi)容顯示不足的話,則以后要添加字段的話,會比較麻煩,有一定的工作量。所以在這個(gè)檢驗(yàn)的時(shí)候,需要根據(jù)視圖的實(shí)際功用,確定視圖需要顯示的內(nèi)容。
第四步:視圖的修飾。有時(shí)候,為了閱讀的方便,我們需要對查詢結(jié)果進(jìn)行一些修飾。如現(xiàn)在有兩張表,一張是員工基本信息表,這表中有員工姓名、員工職位編號
等等;另一張表是職位基本信息表,在這表中有職位編號、職位名稱。我們希望在視圖中能夠如下顯示:“職位:員工名字”,如
數(shù)據(jù)庫工程師
:Victor。也
就是說,把兩個(gè)字段合并起來,并且在中間加入一個(gè)冒號敬敏。這些格式性的內(nèi)容都是在查詢的時(shí)候?qū)崿F(xiàn)的。所以,我們確認(rèn)查詢的結(jié)果沒有錯(cuò)誤之后,接下來就要確認(rèn)
格式問題。若能夠在視圖中規(guī)范這些格式問題,則前臺的程序設(shè)計(jì)就會相對來說比較簡單
第五步:建立視圖。等到上面四步都確認(rèn)無誤后,我們就要根據(jù)上面鬧轎的查詢語句來建立視圖了。不過在這一步過程中,也有一些問題需要注意。一是視圖名字的命
名規(guī)格。我們除了遵循數(shù)據(jù)庫的強(qiáng)制命名格式之外,如不能以數(shù)字開頭等等,還需要遵循一些軟規(guī)則。如視圖更好能夠以V開頭,跟基礎(chǔ)表進(jìn)行隔開;另外在視圖命
名中,能夠根據(jù)應(yīng)用模塊的不同,來進(jìn)行分類,并體現(xiàn)在視圖的名字中。這對于我們后續(xù)視圖的查找都具有非?,F(xiàn)實(shí)的意義。二是雖然可以在視圖中直接更新基礎(chǔ)
表,不過,為了安全與數(shù)據(jù)統(tǒng)一的考慮,我們這些過來人一般都不建議通過視圖來直接更新基礎(chǔ)表中的數(shù)據(jù)。雖然數(shù)據(jù)庫提供了類似的功能。若要更改相關(guān)數(shù)據(jù)的
什么是數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)?
數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)是指數(shù)據(jù)庫系統(tǒng)的整個(gè)體系的結(jié)構(gòu)。數(shù)據(jù)庫系統(tǒng)和鎮(zhèn)孫的體系結(jié)構(gòu)從不同的角度可有不同的劃分方式。從數(shù)據(jù)庫管理系喚鏈統(tǒng)的角度可分為三層,從外到內(nèi)依次為外模式、模式和內(nèi)模式。模式是所有數(shù)據(jù)庫用戶的公共數(shù)據(jù)視圖,是數(shù)據(jù)庫中全部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述。模式(schema)又可細(xì)分為概念模式(conceptual schema)和邏輯模式旅襲(109ical schema)。
希望對你有幫助。
三級結(jié)構(gòu)的組織形式稱為數(shù)據(jù)庫的體系結(jié)構(gòu)或數(shù)據(jù)抽象的三個(gè)級別。這個(gè)結(jié)構(gòu)是于1975年在美國ANSI/X3/SPARC(美國國家標(biāo)準(zhǔn)協(xié)會的計(jì)算機(jī)與信息處理委員會中的標(biāo)準(zhǔn)計(jì)劃與需求委員會)數(shù)據(jù)庫小組的報(bào)告中提出的。
1.1.4.1三級數(shù)據(jù)視圖
數(shù)據(jù)抽象的三個(gè)級別又稱為三級數(shù)據(jù)視圖,是不同層次用戶(人員)從不同角度所看到的數(shù)據(jù)組織形式。
(1) 外部視圖 之一層的數(shù)據(jù)組織形式是面向應(yīng)用的,是應(yīng)用程序員開發(fā)應(yīng)用程序時(shí)所使用的數(shù)據(jù)組織形式,是舉皮物應(yīng)用程序員所看到的數(shù)據(jù)的邏輯結(jié)構(gòu),是用戶數(shù)據(jù)視圖,稱為外部視圖。外部視圖可有多個(gè)。這一層的更大特點(diǎn)是以各類用戶的需求為出發(fā)點(diǎn),構(gòu)造滿足其需求的更佳邏輯結(jié)構(gòu)。
(2) 全局視圖 第二層的數(shù)據(jù)組織形式是面向全局應(yīng)用的,是全局?jǐn)?shù)據(jù)的組織形式,是數(shù)據(jù)庫管理人員所看到的全體數(shù)據(jù)的邏輯組織形式,稱為全局視圖,全局視圖僅有一個(gè)。這一層的特點(diǎn)是對全局應(yīng)用更佳的邏輯結(jié)構(gòu)形式。
(3) 存儲視圖 第三層的數(shù)據(jù)組織形式是面向存儲的,是按照物理存儲更優(yōu)的策略所組織形式,是系統(tǒng)維護(hù)人員所看到的數(shù)據(jù)結(jié)構(gòu),稱為存儲視圖。存儲視圖只有一個(gè)。這一層的特點(diǎn)是物理存儲更佳的結(jié)構(gòu)形式。
外部視圖是全局視圖的邏輯子集,全局視圖是外部視圖的邏輯匯總和綜合,存儲視圖是全局視圖的具體實(shí)現(xiàn)。三級視圖之間的聯(lián)系由二級映射實(shí)現(xiàn)。外部視圖和全局視圖之間的映射稱為邏輯映射,全局視圖和存儲視圖之間的映射稱為物理映射。
1.1.4.2 三級模式
三級視圖是用圖、表等形式描述的,具有簡單、直觀的優(yōu)點(diǎn)。但是,這種形式目前還不能被計(jì)算機(jī)直接識別。為了在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)的三級組織形式,必須用計(jì)算機(jī)可以識別的語言對其進(jìn)行描述。DBMS提供了這種數(shù)據(jù)描述語言(Data Description Language 簡記為DDL)。我們稱用DDL精確定義數(shù)據(jù)視圖的程序?yàn)槟J剑⊿cheme)。與三級視圖對應(yīng)的是三級模式。
?。?) 子模式 定義外部視圖的模式稱外模式,也稱子模式。它由對用戶數(shù)據(jù)文件的邏輯結(jié)構(gòu)描述以及和全局視圖中文件的對應(yīng)關(guān)系的描述組成,用DBMS提供的子模式DDL定義。一個(gè)子模式可以由多個(gè)用戶正液共享,而一個(gè)用戶只能使用一個(gè)子模式。
(2) 模式 定義全局視圖的模式稱邏輯模式,簡稱模式。它由對全局視圖中全體數(shù)據(jù)文件的邏輯結(jié)構(gòu)描述以及和存儲視圖中文件的對應(yīng)關(guān)系的描述組成,用DBMS提供的模式DDL定義。邏輯結(jié)構(gòu)的描述包括記錄的型(組成記錄的數(shù)據(jù)項(xiàng)名、類型、取值范圍等),還有記錄之間的聯(lián)系,數(shù)據(jù)的完整性、安全保密要求等。
?。?) 內(nèi)模式 定義存儲視圖的模式稱內(nèi)模式,又稱物理模式。它由對存儲視圖中全體數(shù)據(jù)文件的存儲結(jié)構(gòu)的描述和對存儲介質(zhì)參數(shù)的描述組成,用DBMS提供的內(nèi)模式DDL定義。存儲結(jié)構(gòu)的描述包括記錄值的存儲方式(順序存儲、hash方法、B樹結(jié)構(gòu)等),索引的組織方式等。
三級模式的結(jié)構(gòu)如圖1.8所示。
三級模式所描述的僅僅是數(shù)據(jù)的組織框架,而不是數(shù)據(jù)本身。在內(nèi)模式這個(gè)框架填上具體數(shù)據(jù)就構(gòu)成物理數(shù)據(jù)庫,它是外部存儲器上真實(shí)存在的數(shù)據(jù)。模握乎式框架下的數(shù)據(jù)是概念數(shù)據(jù)庫,它僅是物理數(shù)據(jù)庫的邏輯映像。子模式框架下的數(shù)據(jù)是用戶數(shù)據(jù)庫,它是概念數(shù)據(jù)庫的邏輯子集。
所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫之間加入了一個(gè)中間層。三層體系不是指物吵寬手理上的三層,不是簡單地放置三臺機(jī)器就是三層體系,三層是指邏輯上的三層,即使這三個(gè)層放置到一臺機(jī)器上。三層體系結(jié)構(gòu)的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問、合法性校驗(yàn)等工作放到了中間層進(jìn)行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫升嫌進(jìn)行交互,而是通過與中間層通訊建立連接,再經(jīng)由中間層與數(shù)據(jù)庫進(jìn)行交互。
在基于B/S的三層體系結(jié)構(gòu)中,表示層、中間層、數(shù)據(jù)層被分割成三個(gè)相對獨(dú)立的單元。
表示層(Browser)位于客戶端,一般沒有應(yīng)用程序,借助于Javaapplet、Actives、Javascript、vbscript等技術(shù)可以處理一些簡單的客戶端處理邏輯。它負(fù)責(zé)由Web瀏覽器向網(wǎng)絡(luò)上的Web服務(wù)器(即中間層)發(fā)出服務(wù)請求,把接受傳來的運(yùn)行結(jié)果顯示在Web瀏覽器上。
中間層(WebServer)是用戶服務(wù)和數(shù)據(jù)服務(wù)的邏輯橋梁。它負(fù)責(zé)接受遠(yuǎn)程或本地的用戶請求,對用戶身份和數(shù)據(jù)庫存取權(quán)限進(jìn)行驗(yàn)證,運(yùn)用服務(wù)器腳本,借助于中間件把請求發(fā)送到數(shù)據(jù)庫服務(wù)器(即數(shù)據(jù)層),把數(shù)據(jù)庫服務(wù)器返回的數(shù)據(jù)經(jīng)過邏輯處理并轉(zhuǎn)換成HTML及各種腳本傳回客戶端。
數(shù)據(jù)層(DBServer)位于更底層,它負(fù)責(zé)管理數(shù)據(jù)庫,接受Web服務(wù)器對數(shù)據(jù)庫操縱的請求,實(shí)現(xiàn)對數(shù)據(jù)庫查詢、修改、更新等功能及相關(guān)服務(wù),并把結(jié)果數(shù)據(jù)提交給Web服務(wù)器。
在三層結(jié)構(gòu)中,數(shù)據(jù)計(jì)算與業(yè)務(wù)處理集中在中間層,只有中間層實(shí)現(xiàn)正式的進(jìn)巧猛程和邏輯規(guī)則。
. 數(shù)據(jù)庫系統(tǒng)的軟件主要包括:
(1) 數(shù)據(jù)庫管理系統(tǒng),DBMS是為數(shù)據(jù)庫的建立、使用和維護(hù)配置的軟件。
(2) 支持DBMS運(yùn)行的操作系統(tǒng)。
(3) 具有與數(shù)據(jù)庫接口的高級語言及其中碰編譯系統(tǒng),便于開發(fā)應(yīng)用程序。
(4) 以DBMS為核心的應(yīng)用開發(fā)工具。
(5) 為特定應(yīng)用環(huán)境開發(fā)的數(shù)據(jù)庫應(yīng)用系統(tǒng)。
2. 整個(gè)數(shù)據(jù)庫系統(tǒng)對硬件資源提出了較高的要求:
(1) 為了存放操作系統(tǒng)、DBMS的核心模塊、數(shù)據(jù)緩沖區(qū)和應(yīng)用程序,需要足夠大的內(nèi)存。
(2) 要有足夠大的磁盤等直接存取設(shè)備存放數(shù)據(jù)庫,有足夠的磁帶(或軟盤)用于數(shù)據(jù)備份。
(3) 系統(tǒng)要提供較高的通道能力,以提高數(shù)據(jù)傳送率。
3. DBA的重要職責(zé)是保證數(shù)據(jù)庫的安全性和完整性。因此DBA負(fù)責(zé)確定各個(gè)用戶對數(shù)據(jù)庫的存取權(quán)限、數(shù)據(jù)的保密級別和完整性約束條件;DBA還有一個(gè)重要職責(zé)就是監(jiān)視數(shù)據(jù)庫系統(tǒng)的運(yùn)行情況,及時(shí)處理運(yùn)行過程中出現(xiàn)的問題。比如系統(tǒng)發(fā)生各種故障時(shí),數(shù)據(jù)庫會因此遭到不同程度的破壞,DBA必須在最短時(shí)間內(nèi)將數(shù)據(jù)庫恢復(fù)到正確狀態(tài),并盡可能不影響或少影響計(jì)算機(jī)系統(tǒng)其他部分的正常運(yùn)行,DBA要定期對數(shù)據(jù)庫進(jìn)行重組織,以提高系統(tǒng)的性能;當(dāng)用戶的需求增加和改變時(shí),DBA還要對數(shù)據(jù)庫進(jìn)行較大的改造,包括修改部分設(shè)計(jì),即數(shù)據(jù)庫的重構(gòu)造。
4. 系統(tǒng)分析員負(fù)責(zé)應(yīng)用系統(tǒng)的需求分析和規(guī)范說明,要和用戶及DBA相結(jié)合,確定系統(tǒng)的硬件軟件配置,并參與數(shù)據(jù)庫系統(tǒng)的概要設(shè)計(jì)。
數(shù)據(jù)庫設(shè)計(jì)人員負(fù)責(zé)數(shù)據(jù)庫中數(shù)據(jù)的確定、數(shù)據(jù)庫各級模式的設(shè)計(jì)。數(shù)據(jù)庫設(shè)計(jì)人員必須參加用戶需求調(diào)查和系統(tǒng)分析,然后進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。在大多數(shù)情況下,數(shù)據(jù)庫設(shè)計(jì)人員就由數(shù)據(jù)庫管理員擔(dān)任。
應(yīng)用程序員負(fù)責(zé)設(shè)計(jì)和編寫應(yīng)用系統(tǒng)的程序模塊并進(jìn)行調(diào)試和安裝。
5. 數(shù)據(jù)庫管理系統(tǒng)的功能有:(1)數(shù)據(jù)定義;(2)數(shù)據(jù)操縱;(3)數(shù)據(jù)庫運(yùn)行管理;(4)數(shù)據(jù)組織、存儲和管理;(5)數(shù)據(jù)庫的建立和維護(hù);(6)數(shù)據(jù)通信接口。
6. DBMS由以下幾個(gè)部分組成:(1)數(shù)據(jù)定義語言及其翻譯處理程序;(2)數(shù)據(jù)操縱語言及其編譯(或解釋)程序;(3)數(shù)據(jù)庫運(yùn)行控制程序;(4)實(shí)用程序。
在關(guān)系模型中,實(shí)體以及實(shí)體間的聯(lián)系都是用關(guān)系來表示的。例如導(dǎo)師實(shí)體、研究生實(shí)體、導(dǎo)師與研究生之間的一對多聯(lián)系都可以分別用一個(gè)關(guān)系來表示。在一個(gè)給定的應(yīng)用領(lǐng)域中,所有實(shí)體及實(shí)體之間聯(lián)系的關(guān)系的構(gòu)成一個(gè)關(guān)系數(shù)據(jù)庫。
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)
關(guān)系數(shù)據(jù)庫模型是如今更流行的數(shù)據(jù)庫模型,其流行源于它結(jié)構(gòu)的簡單性。在關(guān)系模型中最重要的數(shù)據(jù)結(jié)構(gòu)就是關(guān)系。構(gòu)建關(guān)系模型下的數(shù)據(jù)庫,其核心是設(shè)計(jì)組成數(shù)據(jù)庫的關(guān)系。
關(guān)系設(shè)計(jì)中涉及到一些術(shù)語包括:
關(guān)系就是一張表,設(shè)計(jì)關(guān)系就是設(shè)計(jì)一張表;
元組是表中的一行;
屬性是表中的一列,屬性名是給屬性起的名字;
關(guān)鍵字是表中的某個(gè)屬性組,唯一確定一個(gè)元組;
關(guān)系模式是對關(guān)系的描述,一般表示為關(guān)系名(屬性1,屬性2,···,屬性n);
外鍵是關(guān)系中不是該關(guān)系的關(guān)鍵字或只是關(guān)鍵字的一部分的某個(gè)梁褲屬性或?qū)傩越M合,但它同時(shí)是另一個(gè)關(guān)系的關(guān)鍵字;
主表是以外鍵作為主鍵的表;
從表指外鍵所在的表。
在為數(shù)據(jù)庫設(shè)計(jì)關(guān)系時(shí),必須為每個(gè)關(guān)系指定一個(gè)關(guān)鍵字或主碼,并且在該關(guān)系中,關(guān)鍵字的值不能為空,即關(guān)鍵字的值為空的元組在關(guān)系中是不允許存在的。在有些關(guān)系中關(guān)鍵字是由單個(gè)屬性組成的,在另一些關(guān)系中關(guān)鍵字是由若干個(gè)屬性的組合而構(gòu)賣渣談成的,即這種關(guān)系中的元組不能由任何一個(gè)屬性惟一表示,必須由多個(gè)屬性的組合才能惟一表示。關(guān)系模式是穩(wěn)定的,而關(guān)系是隨時(shí)間不斷變化的,因?yàn)閿?shù)據(jù)庫中的數(shù)據(jù)在不斷更新。
數(shù)據(jù)庫的重構(gòu)造的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫的重構(gòu)造,數(shù)據(jù)庫重構(gòu):讓數(shù)據(jù)存儲更高效,數(shù)據(jù)庫如何創(chuàng)建視圖,什么是數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)?的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站標(biāo)題:數(shù)據(jù)庫重構(gòu):讓數(shù)據(jù)存儲更高效(數(shù)據(jù)庫的重構(gòu)造)
分享網(wǎng)址:http://www.5511xx.com/article/cdcoijg.html


咨詢
建站咨詢
