開發者學堂課程【Java面試疑難點串講2:Java資料庫開發:資料庫設計】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/25/detail/543資料庫設計
一張基礎表 dept,100 張單據表用到了 dept 中的 deptno,對于 100 單據表都去設定外鍵參照 dept 表,對于中小型系統來講,在資料庫中表結構設定這種關聯關系,對開發有益;
如果資料量不大,那麼所有正确的涉及思想都是可以正常發揮的。所有可以使用的
查詢,所有可以不進行費勁的操作。
例如:最坑的設計:“程式設計語言+存儲過程”。
對大型系統 ERP 系統(比如用友、金蝶),每張表引入這種關聯關系,實在是太恐怖了,我的想法是在更新的時候,在前台和業務層校驗它 deptno 代号的合法性之後,存入表中,這樣是不是會更好?

那麼此時最大的問題在于系統的可控性上。假如以一個商城為例:初期發展,每天隻
有三個訂單,這個時候的系統吞吐量不大,那麼怎麼設計都可以
後來随着推廣的力度加強,我要組織一個“1313活動”,突然一天的訂單量爆
滿:10000000單
但是不管怎麼折騰,單資料庫根本折騰不了多久。
也就是說單資料庫的開發隻能夠給我們提供一種基礎的鍛煉,相當于你開發經曆
第一層。
随後你需要考慮到資料表的性能,以及系統的拆分問題。
如果要進行資料變得拆分,那麼這些所謂的關聯關系、事務處理,而這種拆庫拆表的操作就成為庫表分離,又有兩種拆分的模式:水準拆分、垂直拆分、垂直水準拆分。
假如說訂單表的資料量很大,于是将這些訂單表拆分為十個資料庫的表,那麼每個資料庫的表隻儲存10%的資料
另外一個是進行垂直拆分操作,那麼就将資料表有一張表拆分為多張表;
如果兩者的結合,那麼就變為了:商城系統。
l 使用者資料庫;
l 訂單資料庫;
l 水準拆分10個資料庫;
l 庫存資料庫。
這個時候看起來這些問題都可以很好的解決。但是同時也需要知道另外一個問題:如果将系統分庫了,實際上是将系統拆分為若幹個子系統的過程,那麼這若幹個子系統之間的溝通以及控制的問題也就出現了。
圖書管理的思想=性能的調整思想。