自己動手寫BBS作為自己學習了一個多月的jsp基礎的一個練習吧。算是一個比較完整的Jsp網站了。
本文介紹這個簡單BBS的數據庫設計部分。
考慮到一個最簡單的BBS系統需要的幾個實體分別是版塊、主題(帖子)、主題回復和用戶。
主要邏輯關系是
1.帖子屬於版塊中
2.回復屬於一個帖子
3.用戶發布帖子和回復
4.用戶對版塊,帖子和回復進行管理(按權限)
5.用戶對用戶進行管理(按權限)
因此設計基本的數據庫E-R圖如下
最後確定表數量
用戶表user
帖子表post
回帖表sub_post
版塊表block
帖子回復關系表
版塊帖子關系表
版塊用戶關系表
修改
在實際設計中修改了表post 添加了屬性last_mod_time 表示此帖子最後修改的時間,從而確定帖子按修改時間從近到久的排列順序。
也可以使用查詢最後一條回帖記錄的回帖時間來確定排序,但考慮到查詢比較復雜耗時,性價比不高,故采用添加一個屬性的方法。
討論
關於數據庫設計的一些討論:
數據庫設計是否一定要滿足數據庫范式才是最好的呢?
我發現,當數據庫實體間的關系為1:1或者1:N時,不讓一定滿足了三范式的數據庫設計方案才是最好的。相反這種設計還可能產生冗余數據。
例如本系統中的數據庫
帖子表(帖子id,帖子信息)
回帖表(回帖id,回帖信息)
帖子回帖關系表(帖子id,回帖id)
帖子和回帖是1:N的關系,此時,如果我們將回帖表改成(回帖id,回帖信息,帖子id),我們可以認為回帖信息和對回帖id存在部分函數依賴,即這樣的設計是不滿足2NF的。也就是說我們將本應該分開的兩個關系(回帖、帖子回帖)合並到了一起,但是正是這種合並減少了一部分冗余,並且不會導致刪除、插入異常。同時簡化了查詢。
因此當數據庫中存在這種1:N或1:1關系時可以考慮這樣的設計方式。雖然不一定滿足數據庫設計范式,但是卻是一個更合理的設計方法
本文出自 “摺扇一路走來” 博客