86.如何得到高效的數據庫邏輯結構?
從關係數據庫的表中
刪除冗餘信息的過程
稱爲數據規範化,
是獲得高效的關係型數據庫表的邏輯結構
最好和最容易的方法。
規範化數據時應執行如下操做:
1.將數據庫的結構精簡爲最簡單的形式
2.從表中刪除冗餘值
3.標識全部依賴與其餘數據的數據
規範化過程有幾個階段,
分別稱做第一範式(1NF)、
第二範式(2NF)、
第三範式(3NF)、
第四範式(4NF)
以及第五範式(5NF)。
對於全部的實際應用,
3NF已經足夠了。
87.數據庫三範式是什麼?
第一範式(1NF):
字段具備原子性,不可再分。
全部關係型數據庫系統
都知足第一範式)
數據庫表中的字段都是單一屬性的,
不可再分。
例如,姓名字段,
其中的姓和名必須做爲一個總體,
沒法區分哪部分是姓,
哪部分是名,
若是要區分出姓和名,
必須設計成兩個獨立的字段。
第二範式(2NF):
第二範式(2NF)是在第一範式(1NF)的基礎上
創建起來的,即知足第二範式(2NF)
必須先知足第一範式(1NF)。
要求數據庫表中的每一個實例
或行必須能夠被唯一地區分。
一般須要爲表加上一個列,
以存儲各個實例的唯一標識。
這個唯一屬性列被
稱爲主關鍵字或主鍵。
第二範式(2NF)要求實體的屬性
徹底依賴於主關鍵字。
所謂徹底依賴是指不能存在
僅依賴主關鍵字一部分的屬性,
若是存在,
那麼這個屬性和主關鍵字的這一部分
應該分離出來造成一個新的實體,
新實體與原實體之間是一對多的關係。
爲實現區分一般須要爲表加上一個列,
以存儲各個實例的唯一標識。
簡而言之,
第二範式就是非主屬性
非部分依賴於主關鍵字。
第三範式(3NF)
是在第二範式的基礎上創建起來的,
即知足第三範式(3NF)
必須先知足第二範式(2NF)。
第三範式(3NF)要求
非主關鍵字不能依賴於
其餘非主關鍵字。
即非主關鍵字之間
不能有函數(傳遞)依賴關係.
即不能從一個表的某個字段
推出該表的另外一個字段。
知足三範式的設計,
基本能夠解決數據冗餘、
插入異常、
更新異常、
刪除異常等數據存儲問題。
88.SQL語句分爲哪幾種?
SQL語句主要能夠劃分爲如下幾類:
DDL(Data Definition Language):
數據定義語言,
定義對數據庫對象(庫、表、列、索引)的操做。
包括:
CREATE、
DROP、
ALTER、
RENAME、
TRUNCATE等
DML(Data Manipulation Language):
數據操做語言,
定義對數據庫記錄的操做。
包括:
INSERT、
DELETE、
UPDATE、
SELECT等
DCL(Data Control Language):
數據控制語言,
定義對數據庫、表、字段、
用戶的訪問權限和安全級別。
包括:
GRANT、
REVOKE等
Transaction Control:
事務控制
包括:
COMMIT、
ROLLBACK、
SAVEPOINT等
89. Delete、truncaate、drop都是刪除語句,它們有什麼分別?
delete 屬於DML語句, 刪除數據, 保留表結構, 須要commit, 能夠回滾, 若是數據量大, 很慢。 truncate 屬於DDL語句, 刪除全部數據, 保留表結構, 自動commit, 不能夠回滾, 一次所有刪除全部數據, 速度相對較快。 Drop屬於 DDL語句, 刪除數據和表結構, 不須要commit, 刪除速度最快。
90.Where和having都是條件篩選關鍵字,它們有什麼分別?
1.Where語句是一條一條從磁盤讀取的, 而後進行判斷, 知足條件的存放到內存, 不知足忽略, 而having是將全部的數據讀入內存中, 而後在內存內部逐條判斷, 不知足直接刪除where是判斷數據從磁盤 讀入內存的時候,having是判斷分組 統計以前的全部條件 2.having子句中可使用字段別名, 而where不能使用 3.having可以使用統計函數, 可是where不能使用 4.where 後不能跟聚合函數, 由於where執行順序大於聚合函數。 5.having 是篩選組 而where是篩選記錄 注意:HAVING用於應被用於WHERE子句的條目, 從咱們開頭的2條語句來看, 這樣用並無出錯, 可是mysql不推薦。 並且也沒有明確說明緣由, 可是既然它要求, 咱們遵循就能夠了