有兩種情況是比較頭疼的:
資料庫重構
資料庫遷移(不同的資料庫差異巨大)
這個判斷的返回值,每個資料庫的設計都不一樣
返回值資料庫型別
false
mysql oracle
空true
sql server
由於空值可能導致無法預料的錯誤,因此盡量要避免空值的使用
資料中沒有boolean型別,是因為不希望使用標識資訊,而是使用具體資訊
就比如,某個教室被預定,這時候不希望出現的是教室是否被占用這個標識資訊,而是在什麼時候、被什麼人占用這類的具體資訊
在單繼承的情況下,存表比較簡單
老師上課舉了這麼乙個例子
劉老師,是人,那麼,在「人」這張表,存劉老師的「人」的資訊,在「教師」這張表,存劉老師的教師資訊。另外,在「人」這張表,存劉老師的身份資訊,是教師,這樣可以把「人」和「教師」兩張表聯合起來查詢,得到劉老師的完整資訊。現在,劉老師為了給他兒子買樂高玩具,需要給曾老闆(教我們linux基礎的老師)打工,這時候,他就多了乙個掃地僧的身份,也就是他的資訊這時候需要三張表來儲存。
這時候要關聯有困難,一種不是很好的做法是把「人」表裡面加列,每多出現乙個身份就多用乙個標識位from的表越少,效率越高,因為笛卡爾積的存在。當然,稍微好一點的做法是,在「人」表裡面,存多條同乙個人的記錄,記錄不同的身份
假設有一張n1
列,m1
行的表1,有一張n2
列,m2
行的表2,將這兩個表連線查詢,得到的是一張(n
1+n2
) 列,(m
1∗m2
) 行的表取m
1=1000
,m2=
10000
,這兩張表都是小表,但是連線起來以後數量級就比較可觀了
在oracle中,最多from16張表
為了減少表關聯,有時需要去掉**表與主表的關聯,因為這樣可能會有過多的表連線,影響效率
所謂的**表是這樣的:id值
1大風2暴雨
3晴朗主表是這樣的:
主表id
**id
aaa1
bbb3
如果**表比較多,就可能導致查詢比較慢,一種改變的做法是這樣的:
主表id
**值aaa
大風bbb晴朗
這樣儲存的時候有冗餘,但是查詢的時候速度較快,從工程學的角度看,為了時間做出空間上的犧牲
oracle中有乙個關鍵字是check,可以檢查資料的定義
在資料庫中不能做過於靈活的設計
優化是一定要付出代價的,一定會帶來惡果
處理歷史資料或者相似的情況,就比如歷史**,可以在主表中存乙個price作為當前的price,在history表中儲存所有的歷史資料,這樣的話,雖然主表中有冗餘的price,但是查詢的時候方便了。
在可以不使用資料庫的情況下,就不使用資料庫,檔案系統很好用。
資料庫開發技術 課堂筆記1
這篇文章可能是一些雜亂的句子。資料庫程式設計師往往不用考慮資料是如何儲存的,是因為有資料庫引擎的優化,而資料庫引擎優化的基礎是關係代數,因此,學資料庫的時候往往都是要學關係代數的。檢視的用法 用於主表的重構 假設以前有表結構 a a,b,c,d 現在表結構變成了a a,b,d,e b c,f,g。此...
資料庫開發技術 課堂筆記3
本文以上課筆記為主,只是擷取了上課很少的一部分內容 連線穩定 減少互動 在開發環境中,測試資料往往是連續的,也就是比較好的資料,因此效能會比較高,而生產環境中,會有各種增刪改查,資料會變得比較不好 一知半解是危險的。乙個feature要從頭到尾看完,要看結構。劉老師講了他當時的故事。當時他還是乙個年...
00 大型資料庫技術課堂測試
1 完成科技查新基本資訊填報功能,基本資訊如下所示 可參考頁面樣式。專案名稱 平台編號 查新範圍 國內 國外 查新目的 立即查新 成果查新 其他查新 單選框,選中某個選項,顯示相應的多選框 立即查新 1.專案申報 國家級 省部級 學協會 其他 2.中小企業創新 研發階段 小試 中試 市場推廣 3.新...