程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 自己動手寫MiniBBS系列(MVC篇)之數據庫設計

自己動手寫MiniBBS系列(MVC篇)之數據庫設計

編輯:關於JSP

 

自己動手寫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關系時可以考慮這樣的設計方式。雖然不一定滿足數據庫設計范式,但是卻是一個更合理的設計方法

本文出自 “摺扇一路走來” 博客

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved