1 需求分析 1
1.1 背景說明 1
1.2 系統目標與系統邊界 1
1.3 功能需求分析 1
1.3.1 系統的功能描述 1
1.3.2 系統總體功能圖 4
1.3.3 主要業務流程描述 6
1.4 數據需求及業務規則分析 8
1.4.1 數據需求描述 8
1.4.2 數據字典 8
1.4.3 業務規則描述 11
1.4.4 數據約束描述 12
2 概念設計 13
2.1 確定實體集及屬性 13
2.1.1 實體集分析 13
2.1.2 實體集屬性數據字典 13
2.2 確定聯系集及屬性 13
2.2.1 聯系集分析 13
2.2.2 聯系集屬性數據字典 13
2.3 概念模型(E-R圖) 13
2.4 檢查是否滿足需求 13
2.5 改進的E-R圖及數據字典 14
3 邏輯設計 14
3.1 關系設計 14
3.2 關系優化 14
3.3 約束的說明 14
4 數據庫物理設計 14
4.1 確定數據庫的存儲結構 14
4.2 確定數據庫的存取方法 15
5 數據庫應用設計 15
5.1 數據庫腳本 15
5.2 數據庫完整性設計 15
5.3 數據庫安全性設計 15
5.4 存儲過程設計 15
6 數據庫應用開發 15
1 需求分析
1.1 背景說明
微博,即微博客(MicroBlog)的簡稱,是一個基於用戶關系的信息分享、傳播以及獲取平台,用戶可以通過WEB、WAP以及各種客戶端組件個人社區,以140字左右的文字更新信息,並實現即時分享。最早也是最著名的微博是美國的twitter,根據相關公開數據,截至2010年1月份,該產品在全球已經擁有7500萬注冊用戶。2009年8月份中國最大的門戶網站新浪網推出“新浪微博”內測版,成為門戶網站中第一家提供微博服務的網站,微博正式進入中文上網主流人群視野,成為網民不可缺少的一部分。
1.2 系統目標與系統邊界
微博廣泛分布在桌面、瀏覽器、移動終端等多個平台上。它十分簡單,在微博客上,不像博客,只有140字的限制將平民和莎士比亞拉到了同一水平線上。導致各種微博大量原創內容爆發性地被生產出來。它也十分便捷,微博即時通訊功能非常強大,在沒有網絡的地方,只要有手機也可即時更新自己的內容,哪怕你就在事發現場。實時性強,在一些大的突發事件或引起全球關注的大事,如果有微博客在場,利用各種手段在微博客上發表出來,其實時性、現場感以及快捷性,甚至超過所有媒體。也正因為如此,微博以迅雷不及掩耳之勢席卷了整個互聯網。然而,面對着成千上萬的用戶,上億的消息等等相關數據,如此海量的數據。如何存儲才能高效處理便成為微博系統架構師的一大難題。也只有設計了良好的微博數據庫,才能使前台,中間件的開發事半功倍,使用戶體驗更好,獲得用戶的青睞,從而吸引更多用戶,為此,我們對微博系統的數據庫進行深入的需求分析與設計,並盡可能的提高微博數據庫的性能。
在本微博系統中,用戶可發表(可發送私信,功能類似於E-MAIL),轉發,評論,收藏消息(其中消息可包括圖片,音樂,視頻鏈接地址),隨時看到被關注者的最新動態。創建,加入,發表,評論微群消息。創建消息,微群話題, 參與話題討論,以及把系統一些建議反饋問題給系統。系統首要任務是如何對用戶,消息聯系之中的數據進行高效處理,並盡可能提高數據庫的性能。
1.3 功能需求分析
1.3.1 系統的功能描述
1.用戶消息管理
l 發表消息 用戶可以隨時發表140個字左右的消息,其中可包括音樂,圖片,視頻,此處除圖片外均為鏈接地址,而圖片只可為相冊中圖片,發表的消息只有用戶本身與關注此用戶的人可以立即收到,否則須查詢到相應用戶才能看到該用戶發表的消息。
l 刪除消息 用戶對發表過的消息,覺得不滿或不適當的,可刪除,只有用戶或系統管理員本身有此權限。
l 評論消息 用戶可對其它用戶發表的消息進行評論,每條消息均會顯示評論條數與評論內容。
l 刪除評論 用戶對自己不滿意或其它原因的評論可刪除。
l 轉發消息 用戶可以轉發關注者所發表的消息,轉發后,每條消息轉發次數均會顯示。
l 查看消息 用戶可以在當前頁面查看到被自己關注者的所有消息,按時間排序。
l 收藏消息 用戶可對其它用戶發表的感興趣的消息收藏,供以后查看,每條消息下均會顯示收藏次數,顯然,私信不可收藏。
2.用戶私信管理
l 發送私信 用戶可以對自己的關注的人,即被關注者,發送私信,只有對方可見。可加入圖片,表情,圖片元素,對方收到后,亦可回信.僅兩人可見。
l 查看私信 私信僅可在同一微博系統中進行發送並在用戶“我的私信”中可查看所有發送和收到的私信。
l 回復私信 用戶收到對方 ----即關注者發私信時,可直接回復對方。
l 刪除私信 用戶可以在“我的私信”中直接刪除私信。
3.微群消息管理
l 發表群消息 用戶可以隨時發表140個字左右的消息,其中可包括音樂,圖片,視頻,此處除圖片外均為鏈接地址,而圖片只可為相冊中圖片,發表的消息只有用戶本身與關注此用戶的人可以立即收到,否則須查詢到相應用戶才能看到該用戶發表的消息。
l 評論群消息 用戶可對其它用戶發表的群消息進行評論,每條消息均會顯示評論條數與評論內容。
l 刪除群評論 用戶對自己不滿意或其它原因的評論可刪除。
l 轉發消息 用戶可以轉發關注者所發表的消息,轉發后,每條消息轉發次數均會顯示。
l 查看消息 用戶可以在當前頁面查看到被自己關注者的所有消息,按時間排序。
4.話題管理
用戶可以把消息發表至某一話題下。用戶也可查看當前熱門話題,並參與之。也可以創建話題。話題中的消息與用戶消息管理是完全一樣的,只是話題細化了整個微博的消息,使用戶能對某一話題進行交流,針對性強。
5.微群話題管理
在微群中亦可創建話題,其功能與一般話題一樣,話題消息限在群中,是對群中消息的細化,使群中消息對某話題有針對性。
二、 用戶管理
1.被關注者管理
l 關注用戶 用戶查找到需要關注用戶時,通過關注即可隨時知道被關注者的最新動態。
l 取消關注 用戶不需要關注某用戶時,直接取消關注即可。
2.用戶信息管理
l 用戶注冊 用戶使用前必須進行注冊才能使用微博,此處使用E-MAIL注冊即可,注冊時填寫E——MAIL與密碼即可完成注冊,系統會檢查E_MAIL是否合法。
l 詳細信息 用戶完成注冊后,可填寫詳細信息,使系統更快的為用戶找出想關注的人和快速對用戶進行分類,如,性別,出生年月,真實姓名,呢稱,電話,身份證號碼,地址,興趣,畢業學校,職業,公司等.
3.關注組管理
l 創建關注組 當用戶關注的人特別多時,顯得有些不易於查看被關注者發表的信息,關注組即是對眾多用戶關注的人進行再次分組,並添加顯示名稱,可最為快捷的知道想要特別關注的一些人的最新動態。
l 刪除關注組 刪除關注組,即取消關注組里面人的特別關注,此處只是刪除關注組,並不會取消組里用戶的關注。
l 添加用戶 添加已關注的用戶至關注組中。
l 刪除用戶 刪除關注組中的用戶。
4.用戶微群管理
l 創建微群 用戶可以在微博中創建微群,群為超過一個用戶有相同屬性的用戶集,如老鄉會,同學群,公司群等等.創建微群后,用戶也可以微群中創建若干話題,微群相當於在微博中一個小社區.
l 加入微群 用戶可以通過搜索和微群分類以及系統推薦的一些熱門群加入微群,只在加入后才可以微群里發表群消息.
l 退出微群 用戶可以直接退出已加入的群。
5.用戶相冊管理
l 創建相冊 用戶可以在微博中建立多個相冊。
l 刪除相冊 用戶可以刪除創建的相冊,只有空相冊可以刪除。
l 上傳照片 用戶在微博中建立相冊后,便可上傳圖片到相冊中,與好友一起分享。
l 刪除照片 用戶可以刪除上傳后的圖片。
6.管理員管理
提供系統管理員管理功能,管理員可對消息進行審查,如有不適當傳播的消息可屏蔽之,亦可回復用戶的反饋,也可以關注微博中的異常並處理之。此處管理員與一般用戶類似,只有具有管理員認證。
7.皮膚管理
用戶可對自己本身的微博選各種各樣的皮膚,用以美觀界面,也可以上傳圖片自定義皮膚。
三、 查找
1. 用戶分類查找
系統會根據用戶所填寫的信息對用戶進行細致的分類,使用戶能快速查找到相關者,但是此處,並不是每個人都會進行分類,微博用戶人數極其龐大,系統只會對達人進行分類以供查找。
2. 用戶名查找
用戶可以通過用戶名查找需要關注的用戶。
3. 微群查找
用戶可以通過群名來查找相關的群。
4. 微群分類查找
用戶也可以通過群分類來快速定位感興趣的群,同樣系統也不會對所以群進行分類,只有人數超過一定數量且活躍的才進行分類。
四、 統計
1. 熱門話題
系統會對當前微博中熱議的話題進行排名處理,供用戶知道當前微博中大部分用戶在討論什么。用戶也可快速參與其中。
2. 推薦用戶,群
系統根據用戶填寫的信息,如畢業學校,愛好等到信息對用戶進行快速推薦與用戶有關的人和當前熱門的群。
五、 反饋
如用戶對於微博有什么意見和要求,可以通過反饋信息留言給管理員,針對用戶所提出的問題,微博管理員會認真處理,使微博做的更好,此處主要以話題方式反饋給系統。
1.3.2 系統總體功能圖
1.3.3 主要業務流程描述
Ø 普通用戶流程如下圖:
注:
1. 用戶信息管理:
l 用戶信息管理
2. 消息管理:
l 用戶消息管理
l 微群消息管理
l 用戶私信管理
l 話題管理
l 微群話題管理
3. 被關注者管理:
l 關注組管理
l 被關注者管理
4. 群管理:
l 創建微群
l 加入微群 .
l 退出微群
5. 相冊管理:
l 創建相冊
l 刪除相冊
l 上傳照片
l 刪除照片
6. 評論管理:
l 發表評論
7. 皮膚管理:
l 更改皮膚
Ø 管理員流程如下圖:
注:
1. 審核消息,評論:
審核有戶發表的消息,評論是否有些不恰當於網絡中的,給予相應處理。
2. 關注系統異常:
關注系統的異常,BUG。及時做出處理。
3. 回復反饋:
回復用戶微博提出的問題。
1.4 數據需求及業務規則分析
1.4.1 數據需求描述
對系統中的各種事物(對象)以及聯系的屬性進行描述,可能是基本對象,也可能是業務表格/單據(很多會涉及到多個基本對象之間的聯系)。
1. 消息:消息包含消息編號,用戶編號,話題編號,發表時間,轉發次數,收藏次數,評論次數組成。
2. 私信:私息是消息的派生,增加了被發送者編號。
3. 微群消息:微群消息是消息的派生,增加了群編號。
4. 話題:由消息標題組成。
5. 評論:由消息編號,評論編號,用戶編號,評論時間,評論內容組成。
6. 微群:由微群編號,數據項名,微群編號,微群妮稱,群管理員,微群用戶編,微群標簽,用戶數,創建時間組成。
7. 群消息評論:評論派生,只增加了群編號。
8. 用戶:用戶由用戶編號,妮稱,用戶頭像,郵箱,性別,密碼,真實姓名,皮膚編號,QQ,畢業院校,職位,手機號,自我介紹,用戶標簽,興趣,個人博客地址,注冊時間組成。
9. 關注組:由關注組編號,被關注組編號,關注名稱,創建時間組成。
10. 相冊:由用戶編號,相冊編號,相冊名稱,圖片名稱,圖片內容,圖片創建時間組成。
11. 皮膚:由皮膚編號,背景圖片組成,主題顏色組成。
12. 收藏:由用戶編號,消息編號組成。
1.4.2 數據字典
數據項名 |
取值范圍 |
數據項含義說明 |
用戶編號 |
以U開頭加10位數字組成 |
用戶編號,唯一識用戶的字段 |
用戶妮稱 |
任意字符 |
用戶在微博中顯示的妮稱,即用戶名。 |
用戶頭像 |
圖片類型 |
用戶微博圖像 |
郵箱(登陸名) |
符合郵箱規范 |
用戶登陸所用 |
密碼 |
至少6個可打印字符 |
用戶登陸所用密碼 |
性別 |
男,女,保密 |
用戶性別 |
真實姓名 |
任意可打印字符 |
用戶真實姓名 |
皮膚編號 |
S加10位數字 |
用戶所用皮膚編號 |
|
6到10位數字 |
用戶QQ |
畢業院校 |
任意可打印字符 |
用戶畢業院校 |
職位 |
任意可打印字符 |
用戶職位 |
手機號 |
11位數字 |
用戶手機號碼 |
自我介紹 |
任意可打印字符 |
用戶一些簡要的自我介紹 |
用戶標簽 |
任意可打印字符 |
用戶的興趣愛好 |
注冊時間 |
時間 |
用戶注冊時間 |
個人博客 |
HTTP地址 |
用戶博客地址 |
2. 關注組表:
數據項名 |
取值范圍 |
數據項含義說明 |
關注組編號 |
以NG加10位數字組成 |
用戶對所關注人可組成組 |
被關注者編號 |
同用戶編號 |
同用戶編號 |
創建時間 |
時間 |
創建關注組時間 |
關注組名稱 |
任意可打印字符 |
創建的關注組名稱 |
3. 普通消息表:
數據項名 |
取值范圍 |
數據項含義說明 |
消息編號 |
以M開頭加15位數字組成 |
用戶發表消息編號 |
用戶編號 |
以U開頭加10位數字組成 |
用戶編號 |
消息內容 |
任意可打印字符 |
用戶發表消息內容 |
話題 |
任意可打印字符 |
用戶發表消息所屬話題 |
鏈接 |
http鏈接 |
用來鏈接音樂,視頻 |
收藏次數 |
數值 |
消息被收藏的次數 |
評論次數 |
數值 |
消息被評論的次數 |
轉發次數 |
數值 |
消秘被轉發的次數 |
發表時間 |
時間 |
用戶發表消息明間 |
4. 消息收藏表:
數據項名 |
取值范圍 |
數據項含義說明 |
用戶編號 |
同用戶編號 |
同用戶編號 |
消息編號 |
同消息編號 |
同消息編號 |
5. 用戶私信表:
數據項名 |
取值范圍 |
數據項含義說明 |
私信編號 |
以PM開頭加10位數字 |
用戶發送私信編號 |
關注者編號 |
同用戶編號 |
同用戶編號 |
被關注者編號 |
同用戶編號 |
同用戶編號 |
私信內容 |
任意可打印字符 |
用戶發送私信內容 |
發送時間 |
時間 |
用戶發送私信時間 |
6. 群消息表:
數據項名 |
取值范圍 |
數據項含義說明 |
群消息編號 |
GM開頭加15位數字組成 |
群消息編號 |
用戶編號 |
同用戶編號 |
同用戶編號 |
微群話題內容 |
任意可打印字符 |
微群中話題名稱 |
群編號 |
G開頭加10位數字組成 |
用戶所建群編號 |
發表時間 |
時間 |
用戶發表群消息時間 |
群消息評論編號 |
同群消息評論編號 |
同群消息主評論編號 |
群消息內容 |
任意可打印字符 |
群消息內容 |
7. 評論表:
數據項名 |
取值范圍 |
數據項含義說明 |
評論編號 |
以R開頭加15位數字組成 |
用戶評論 |
消息編號 |
同消息編號 |
同消息編號 |
用戶編號 |
同用戶編號 |
同用戶編號 |
評論時間 |
時間 |
用戶發表評論時間 |
評論內容 |
任意可打印字符 |
用戶發表評論內容 |
8. 微群表:
數據項名 |
取值范圍 |
數據項含義說明 |
微群編號 |
同群編號 |
同群編號 |
微群妮稱 |
任意可打印字符 |
群的顯示名稱 |
群管理員 |
同用戶編號 |
同用戶編號 |
微群用戶編號 |
同用戶編號 |
同用戶編號 |
微群標簽 |
同用戶標簽 |
同用戶標簽 |
用戶數 |
數值 |
微群中成員數量 |
創建時間 |
時間 |
創建群時間 |
9. 微群評論表:
數據項名 |
取值范圍 |
數據項含義說明 |
微群編號 |
同群編號 |
同群編號 |
評論編號 |
以R開頭加15位數字組成 |
用戶評論 |
消息編號 |
同消息編號 |
同消息編號 |
用戶編號 |
同用戶編號 |
同用戶編號 |
評論時間 |
時間 |
用戶發表評論時間 |
評論內容 |
任意可打印字符 |
用戶發表評論內容 |
10. 相冊表:
數據項名 |
取值范圍 |
數據項含義說明 |
相冊編號 |
P開頭加10位數字組成 |
用戶相冊編號 |
用戶編號 |
同用戶編號 |
同用戶編號 |
相片名稱 |
任意可打印字符 |
相片名稱 |
相片內容 |
圖片類型 |
用戶分享的圖片 |
相冊名稱 |
任意可打印字符 |
用戶相冊名字 |
11. 皮膚表:
數據項名 |
取值范圍 |
數據項含義說明 |
皮膚編號 |
S開頭加5位數字組成 |
皮膚編號 |
背景圖片 |
圖片類型 |
同用戶編號 |
主題顏色 |
9位數字 |
RGB表示主題顏色 |
1.4.3 業務規則描述
(2) 用戶注冊時只能使用電子郵件進行注冊,密碼為不少於6位的字符,注冊成功后,必須增加用戶詳細信息,如用戶名,等信息必填的信息。才能使用微博。
(3) 用戶可以關注多個被關注者,一個用戶也可以被關注者關注多次。
(4) 只有關注用戶,或加入群后,系統才會把被關注的用戶的最新動態發送至用戶微博界面。
(5) 關注者:即相當於用戶的粉絲,用戶一發表消息即發送到關注者的微博界面中。
(6) 被關注者:用戶關注了的人,可以隨時看到被關注者的最新動態。
(7) 關注組:對被關注都進行快速分組,可以對特別的人進行特別關注,在被關注者多時推薦使用。
(8) 達人:當用戶的關注者超過200個,被關注者超過100個,且每天至少發表一條消息即可成為達人,達人需要向系統申請,內容參照標簽。
(9) 認證:為用戶在某領域具有一定權威的人物,如演員,專家,為達人一種派生,認證需系統官方進行操作,認證的范圍由系統給定。
(10) 活躍群:當群中人數超過300人,且每日消息數量不少於100條時,便可成為活躍群。
(11) 標簽:用戶標簽項不可超過20項,用戶只能從系統中選擇標簽。
(12) 推薦用戶:當用戶填寫了比較完整的信息時,系統便會根據用戶的信息,如職業,用戶標簽,
(13) 用戶分類,系統會自動為成為達人與認證的用戶分類,使其它用戶能快速了解到達人的最新動態。
(14) 反饋其實只是一種特殊話題。只不過此話題由系統默認創建。
(15) 管理員也為微博中一個用戶,但身份已被系統認證為系統管理員。
(16) 消息由消息編號唯一確定。
(17) 轉發消息,用戶可轉發其它用戶已發表消息,轉發消息只是在用戶復制其它用戶發表的消息再重新發表,並在消息內容片顯示被轉發者。
(18) 私信由私信編號唯一確定。
(19) 群消息由群消息編號唯一確定。
(20) 話題,微群話題只是在消息,微群消息中加入話題標題字段,發表時在兩#之間內容即為話題,如發表消息無話題,系統默認置空。
(21) 熱門話題:系統會對當前話題消息數量前15的進行統計,讓用戶能隨時知道當前最熱門的話題。
(22) 微群由群號唯一確定。
(23) 微群中的消息只有群管理員有權限刪除。
(24) 微群標簽:同用戶標簽一樣,微群也可設置標群標簽,只有群管理員有此權限,微群標簽只能選擇一個。
(25) 推薦群,同推薦用戶一樣,系統會根據群的標簽等其它信息與用戶標簽把相似的群推薦給用戶。
(26) 微群分類:同達人一樣,系統也會為活路微群進行分類,使用戶能快速找到自己喜歡的群,但只有活躍群才會進行分類。
(27) 評論由評論編號唯一確定。
(28) 微群評論由微群評論編號唯一確定。
(29) 用戶由用戶編號唯一確定。
(30) 用戶組由組號唯一確定
(31) 相冊由相冊編號唯一確定。
(32) 相冊中圖片由圖片編號唯一確定。
1.4.4 數據約束描述
1) 一個用戶的關注者不限,但被關注者不可超過10萬。
2) 一個用戶相冊數不能超過100個,相冊中圖片不可超過500個。
3) 一個用戶創建的微群不可超過10個,微群中的管理員不可超過5個。
4) 一個用戶創建的用戶組不可超過50個,組中的關成員不可超過50個。
5) 消息的字數不可超過140個,鏈接除外。
6) 普通消息編碼規則:以M開頭15位數字組成。
7) 話題編碼規則:以T加15位數字組成。
8) 私信編碼規則:以PM開頭15數字組成。
9) 群信息編碼規則:以GM開頭15位數字組成。
10) 評論編碼規則:以R開頭15位數字組成。
11) 微群評論編碼規則:以GR開頭15位數字組成。
12) 微群編碼規則:以G開頭10位數字組成。
13) 用戶編碼規則:以U開頭加10位數字組成。
14) 院校編碼規則:以S加10位數字組成。
15) 標簽編碼規則:以L加10位數字組成。
16) 關注組編碼規則:以NG加10位數字組成。
17) 相冊編碼規則:以PF開頭加10位數字組成。
18) 相冊圖片編碼規則:以P開頭加10位數字組成。
19) 皮膚編碼規則:以S開頭加5位數字組成。
2 概念設計
2.1 確定實體集及屬性
2.1.1 實體集分析
從系統的數據需求描述中,抽取出實體集(可能對應基本對象,也可能對應表格/單據),並對其屬性進行描述,根據需求分析可得到如下實體集:
1. 用戶實體集。其屬性有:包括用戶編號,妮稱,用戶頭像,郵箱,性別,密碼,真實姓名,QQ,職位,手機號,自我介紹,個人博客地址,注冊時間, 達人,認證。
2. 院校實體集。其屬性有:院校編號,院校名稱,所在省,所在市,所在縣。
3. 標簽實體集。標簽編號,標簽內容。
4. 消息實體集。派生普通消息與群消息,其屬性有:消息編號,消息內容,評論次數,收藏次數,轉發次數。
5. 私信實體集。其屬性有:私信編號,私信內容。
6. 評論實體集。其屬性有:評論編號,評論內容。
7. 微群實體集。其屬性有:微群編號,微群妮稱,管理員,用戶數。
8. 關注組實體集。其屬性有:由關注組編號,關注組名稱,被關注者人數。
9. 相冊實體集。其屬性有相冊編號,相冊名稱,圖片數量。
10. 圖片實體集。其屬性有:圖片編號,圖片名稱,圖片內容。
11. 皮膚實體集。其屬性有:皮膚編號,背景圖片,主題顏色。
12. 話題實體集。派生消息話題與群標題。其屬性有:話題編號,消息數量,話題簡介。
2.1.2 實體集屬性數據字典
1. 用戶表:
數名項名 |
取值范圍 |
數據項含義說明 |
用戶編號 |
以U開頭加10位數字組成 |
用戶編號,唯一識用戶的字段 |
用戶妮稱 |
任意字符 |
用戶在微博中顯示的妮稱,即用戶名。 |
用戶頭像 |
圖片類型 |
用戶微博圖像 |
郵箱(登陸名) |
符合郵箱規范 |
用戶登陸所用 |
密碼 |
至少6個可打印字符 |
用戶登陸所用密碼 |
性別 |
男,女,保密 |
用戶性別 |
真實姓名 |
任意可打印字符 |
用戶真實姓名 |
|
6到10位數字 |
用戶QQ |
職位 |
任意可打印字符 |
用戶職位 |
手機號 |
11位數字 |
用戶手機號碼 |
自我介紹 |
任意可打印字符 |
用戶一些簡要的自我介紹 |
注冊時間 |
時間 |
用戶注冊時間 |
認證 |
系統提供,某一領域,如演員,學者 |
參照標簽屬性,為在某一領域有影響的專家 |
達人 |
參照標簽內容 |
為在某一方面有愛好或專長 |
個人博客 |
HTTP地址 |
用戶博客地址 |
2. 院校表:
數據項名 |
取值范圍 |
數據項含義說明 |
院校編號 |
以S加10位數字組成 |
院校編號 |
所在省 |
中文字符 |
院校所在省份 |
所在市 |
中文字符 |
院校所在市 |
所在縣 |
中文字符 |
院校所在縣 |
院校名稱 |
中文字符 |
院校名稱 |
3. 標簽表
數據項名 |
取值范圍 |
數據項含義說明 |
標簽編號 |
以L加10位數字組成 |
標簽編號 |
標簽內容 |
中文字符 |
用戶標簽 |
4. 關注組表:
數據項名 |
取值范圍 |
數據項含義說明 |
關注組編號 |
以NG加10位數字組成 |
用戶對所關注人可組成組 |
關注組名稱 |
任意可打印字符 |
創建的關注組名稱 |
5. 消息表:
數據項名 |
取值范圍 |
數據項含義說明 |
消息編號 |
普通消息/群消息編號 |
用戶發表消息編號 |
消息內容 |
任意可打印字符 |
用戶發表消息內容 |
話題 |
任意可打印字符 |
用戶發表消息所屬話題 |
鏈接 |
http鏈接 |
用來鏈接音樂,視頻 |
收藏次數 |
數值 |
消息收藏的次數 |
評論次數 |
數值 |
消息評論的次數 |
轉發次數 |
數值 |
消息被轉發的次數 |
6. 用戶私信表:
數據項名 |
取值范圍 |
數據項含義說明 |
私信編號 |
以PM開頭加10位數字 |
用戶發送私信編號 |
私信內容 |
任意可打印字符 |
用戶發送私信內容 |
7. 評論表:
數據項名 |
取值范圍 |
數據項含義說明 |
評論編號 |
消息評論/群消息評論 |
用戶評論 |
評論內容 |
任意可打印字符 |
用戶發表評論內容 |
8. 微群表:
數據項名 |
取值范圍 |
數據項含義說明 |
微群編號 |
同群編號 |
同群編號 |
微群妮稱 |
任意可打印字符 |
群的顯示名稱 |
群管理員 |
同用戶編號 |
同用戶編號 |
微群標簽 |
同用戶標簽 |
同用戶標簽 |
用戶數 |
數值 |
微群中成員數量 |
9. 相冊表:
數據項名 |
取值范圍 |
數據項含義說明 |
相冊編號 |
P開頭加10位數字組成 |
用戶相冊編號 |
圖片數量 |
數值 |
相冊中圖片個數 |
相冊名稱 |
任意可打印字符 |
用戶相冊名字 |
10. 圖片表:
數據項名 |
取值范圍 |
數據項含義說明 |
圖片編號 |
P開頭加10位數字組成 |
用戶上傳圖片編號 |
相片名稱 |
任意可打印字符 |
相片名稱 |
相片內容 |
圖片類型 |
用戶分享的圖片 |
11. 皮膚表:
數據項名 |
取值范圍 |
數據項含義說明 |
皮膚編號 |
S開頭加5位數字組成 |
皮膚編號 |
背景圖片 |
圖片類型 |
同用戶編號 |
主題顏色 |
9位數字 |
RGB表示主題顏色 |
12.話題表
數據項名 |
取值范圍 |
數據項含義說明 |
話題編號 |
群話題編號/ 消息話題編號 |
用戶發表消息編號 |
消息數量 |
數值 |
話題包含的消息個數 |
話題標題 |
最多不超過20字符 |
話題的標題 |
話題簡介 |
任意可打印字符 |
話題內容簡介 |
2.2 確定聯系集及屬性
2.2.1 聯系集分析
對各實體集(聯系集)之間的聯系進行描述,包括聯系的映射基數、聯系屬性等。
1. 用戶——用戶的關注聯系集:多對多聯系,一個用戶可以關注多個用戶,而用戶也可以被多個用戶關注。
2. 用戶——私信的發送聯系集:一對多聯系,一個用戶可以給多個用戶發送私信。其屬性有:發送時間。
3. 用戶——私信的接收聯系集:一對多聯系,一個用戶可以接收多個用戶發送的私信。
4. 用戶——關注組的創建聯系集:一對多聯系,一個用戶可以創建多個關注組。其屬性有:關注組創建時間。
5. 用戶——關注組的包含聯系集:多對多聯系,一個用戶可以被關注組包多次,一個關注組也可以包含多個用戶。
6. 用戶——相冊的創建聯系集:一對多聯系,一個用戶可以創建多個相冊。其屬性有:創建時間。
7. 用戶——圖片的上傳聯系集:一對多聯系,一個用戶可以上傳多張照片,其屬性有:上傳時間。
8. 用戶——院校的屬於聯系集:多對一聯系,一個畢業院校可以有多個學生,即用戶。
9. 用戶——標簽的包含聯系集:一個用戶可以有多個標簽描述自己,一個標簽也可以被多個用戶使用。
10. 相冊——圖片的包含聯系集:一對多聯系,一個相冊可以包含多個圖片。
11. 用戶——皮膚的使用聯系集:多對一聯系,一種皮膚可以被多個用戶使用。
12. 用戶——群的創建聯系集:一對多聯系,一個用戶可以創建多個群,其屬性有:創建時間。
13. 用戶——群的包含聯系集:多對多聯系,一個群可以包含多個用戶,一個用戶也可以加入多個群。
14. 用戶——評論發表聯系集:一對多聯系,一個群用戶可以發表多條群評論,其屬性有:評論時間。
15. 用戶——消息的發表聯系集:一對多聯系,一個用戶可以發表多條消息,其屬性有:發表時間。
16. 用戶——消息的收藏聯系集:多對多聯系,一個用戶可以收藏多條消息,一條消息可以被多個用戶收藏。
17. 用戶——消息的轉發聯系集:多對多聯系,一個用戶可以轉發多條消息,一條消息可以被多個用戶轉發。。
18. 消息——評論的包含聯系集:一對多聯系,一條消息含有多個評論。
19. 消息——話題的包含聯系集:多對一聯系,一個話題有多個消息。
2.2.2 聯系集屬性數據字典
1. 用戶——私信的發送聯系集:
數據項名 |
取值范圍 |
數據項含義說明 |
發送時間 |
時間類型 |
用戶發送給關注者私信的時間 |
2. 用戶——關注組創建聯系集:
數據項名 |
取值范圍 |
數據項含義說明 |
創建時間 |
時間類型 |
用戶創建關注組的時間 |
3. 用戶——相冊的創建聯系集:
數據項名 |
取值范圍 |
數據項含義說明 |
創建時間 |
時間類型 |
用戶創建相冊的時間 |
4. 用戶——圖片的上傳聯系集:
數據項名 |
取值范轉 |
數據項含義說明 |
上傳時間 |
時間類型 |
用戶上傳圖片的時間 |
5. 用戶——群的創建聯系集:
數據項名 |
取值范轉 |
數據項含義說明 |
創建時間 |
時間類型 |
用戶上傳圖片的時間 |
6. 用戶——消息的發表聯系集:
數據項名 |
取值范轉 |
數據項含義說明 |
上傳時間 |
時間類型 |
用戶上傳圖片的時間 |
7. 用戶——評論的發表聯系集:
數據項名 |
取值范轉 |
數據項含義說明 |
發表時間 |
時間類型 |
用戶發表評論的時間 |
2.3 概念模型(E-R圖)
l 實體E—R圖:
2. 消息實體集:
3. 標簽實體集:
4. 院校實體集:
5. 評論實體集:
6. 微群實體集:
7. 關注組實體集:
8. 相冊實體集:
9. 圖片實體集:
10. 皮膚實體集:
11. 私信實體集:
12. 話題實體集:
l 總E—R圖:
1. 第一部分:
2. 第2部分:
3 邏輯設計
3.1 關系設計
注:以下表中,加粗加下划線屬性為主碼,加粗斜體屬性為外碼。
l 由實體集轉化而來的表:
屬性名稱 |
數據類型 |
屬性說明 |
Uid |
char(11) |
用戶編號 |
Ualais |
varchar(20) |
用戶妮稱 |
Uimage |
image |
用戶頭像 |
Ulogon |
varchar(30) |
郵箱(登陸名) |
Upassswd |
varchar(20) |
密碼 |
Usex |
char(1) |
性別 |
Uname |
varchar(20) |
真實姓名 |
Uskin |
char(11) |
皮膚編號 |
Uqq |
varchar(11) |
|
Uschool |
Char(11) |
畢業院校 |
Uwork |
varchar(20) |
職位 |
Utel |
char(10) |
手機號 |
Uinfo |
varchar(100) |
自我介紹 |
Udatetime |
datetime |
注冊時間 |
Ublog |
varchar(50) |
個人博客 |
2. 關注組attenGruop表:
屬性名稱 |
數據類型 |
屬性說明 |
Uid |
Char(11 |
用戶編號 |
NGid |
Char(12) |
關注組編號 |
Uider |
Char(11) |
被關注者編號 |
NGDatetime |
Datetime |
創建時間 |
NGnum |
Int |
關注組人數 |
Ngname |
Varchar(20) |
關注組名稱 |
3. 院校school表
屬性名稱 |
數據類型 |
屬性說明 |
Sid |
Char(11) |
院校編號 |
Sname |
Varchar(10) |
所在省 |
Spro |
Varchar(10) |
所在市 |
Scity |
Varchar(10) |
所在縣 |
Scountry |
Varchar(20) |
院校名稱 |
4. 標簽label表
屬性名稱 |
數據類型 |
屬性說明 |
Lid |
Char(11) |
標簽編號 |
Lname |
Varchar(10) |
標簽內容 |
5. 用戶使用標簽UserLabel
屬性名稱 |
數據類型 |
屬性說明 |
Uid |
Char(11) |
用戶編號 |
Lid |
char(11) |
標簽編號 |
6. 私信priMessage表:
屬性名稱 |
數據類型 |
屬性說明 |
PMid |
Char(12) |
私信編號 |
Uid |
Char(11) |
發送者編號 |
RUid |
Char(11) |
接收者編號 |
PMcontent |
Varchar(200) |
私信內容 |
PMdatetime |
datetime |
發送時間 |
7. 微群group表:
屬性名稱 |
數據類型 |
屬性說明 |
Gid |
Char(16) |
微群編號 |
Gname |
Varchar(20) |
微群妮稱 |
Gadmin |
Char(11) |
群管理員 |
Gid |
Char(11) |
微群用戶編號 |
Glabel |
Char(11) |
微群標簽 |
Gnum |
Int |
用戶數 |
Gdatetime |
Datetime |
創建時間 |
8. 相冊photoFolder表
屬性名稱 |
數據類型 |
屬性說明 |
PFid |
Char(11) |
相冊編號 |
Uid |
Char(11) |
用戶編號 |
PFname |
Varchar(20) |
相冊名稱 |
PFnum |
int |
圖片數量 |
Pid |
Char(11) |
圖片編號 |
9. 圖片photo表:
屬性名稱 |
數據類型 |
屬性說明 |
Pid |
Char(11) |
圖片編號 |
Pname |
Varchar(20) |
相片名稱 |
Photo |
Varbinary(5000) |
圖片 |
10. 皮膚skin表:
屬性名稱 |
數據類型 |
屬性說明 |
Sid |
Char(6) |
皮膚編號 |
Simage |
Varbinary(2048) |
背景圖片 |
Scolor |
Char(9) |
RGB主題顏色 |
l 由類層次轉化而來的表:
1. 普通消息message表:
屬性名稱 |
數據類型 |
屬性說明 |
Mid |
Char(16) |
消息編號 |
Uid |
Char(11) |
用戶編號 |
Tid |
Char(16) |
話題編號 |
Cid |
Char(11) |
轉發編號 |
Mcontent |
Varchar(150) |
消息內容 |
Mhttp |
Varchar(150) |
鏈接 |
Mfav |
Int |
收藏次數 |
Mreply |
Int |
評論次數 |
Mcopy |
Int |
轉發次數 |
Mdatetime |
datetime |
發表時間 |
2. 普通消息話題messageTitle表
屬性名稱 |
數據類型 |
屬性說明 |
Tid |
Char(16) |
話題編號 |
Tnum |
Int |
消息數量 |
Tname |
Varchar(20) |
話題標題 |
Tcontent |
Varchar(1000) |
話題簡介 |
Ttime |
datetime |
發表時間 |
3. 普通消息評論messageReply表:
屬性名稱 |
數據類型 |
屬性說明 |
Rid |
Char(16) |
評論編號 |
Mid |
Char(16) |
消息編號 |
Uid |
Char(11) |
用戶編號 |
Rdatetime |
Datetime |
評論時間 |
Rcontent |
Varchar(200) |
評論內容 |
4. 群消息話題groupTitle表:
屬性名稱 |
數據類型 |
屬性說明 |
GTid |
Char(17) |
群話題編號 |
Tnum |
Int |
消息數量 |
Tname |
Varchar(20) |
話題標題 |
Tcontent |
Varchar(1000) |
話題簡介 |
Ttime |
datetime |
發表時間 |
5. 微群消息評論gruopReply表
屬性名稱 |
數據類型 |
屬性名稱 |
GRid |
Char(17) |
微群消息評論編號 |
GMid |
Char(17) |
群消息編號 |
Gid |
Char(17) |
群編號 |
Uid |
Char(11) |
用戶編號 |
GRdatetime |
datetime |
評論時間 |
GRcontent |
Varchar(200) |
評論內容 |
6. 群消息groupMessage表:
屬性名稱 |
數據類型 |
屬性說明 |
GMid |
Char(17) |
群消息編號 |
Gid |
Char(16) |
群編號 |
Uid |
Char(11) |
用戶編號 |
GTid |
Char(17) |
群話題編號 |
Cid |
Char(11) |
轉發編號 |
Mcontent |
Varchar(150) |
消息內容 |
Mhttp |
Varchar(150) |
鏈接 |
Mreply |
Int |
評論次數 |
Mcopy |
Int |
轉發次數 |
GMdatetime |
datetime |
發表時間 |
l 由聯系集轉化的表:
1. 收藏fav表:
屬性名稱 |
數據類型 |
屬性說明 |
Fid |
Char(11) |
收藏編號 |
Uid |
Char(11) |
用戶編號 |
Mid |
Char(16) |
消息編號 |
2. 關注表attention表:
屬性名稱 |
數據類型 |
屬性說明 |
Uid |
Char(11) |
用戶編號 |
attUid |
Char(11) |
被關注者編號 |
3. 轉發copy表:
屬性名稱 |
數據類型 |
屬性說明 |
Cid |
Char(11) |
轉發表編號 |
Uid |
Char(11) |
用戶編號 |
Mid |
Char(16) |
被轉發消息編號 |
CUid |
Char(11) |
被轉發用戶編號 |
3.2 關系優化
l 微群group表:
屬性名稱 |
數據類型 |
屬性說明 |
Gid |
Char(16) |
微群編號 |
Gname |
Varchar(20) |
微群妮稱 |
Gadmin |
Char(11) |
群管理員 |
GUid |
Char(11) |
微群用戶編號 |
Glabel |
Char(11) |
微群標簽 |
Gnum |
Int |
用戶數 |
Gdatetime |
Datetime |
創建時間 |
並不符合BCNF,把group 分解得
groupMember(Gid,GUid)
groupInfo(Gid,Gname ,Gnum,Gdatetime)
groupMemAdmin(Gid,Gadmin)
l 關注組attenGruop表:
屬性名稱 |
數據類型 |
屬性說明 |
Uid |
Char(11 |
用戶編號 |
NGid |
Char(12) |
關注組編號 |
Uider |
Char(11) |
被關注者編號 |
NGDatetime |
Datetime |
創建時間 |
NGnum |
Int |
關注組人數 |
Ngname |
Varchar(20) |
關注組名稱 |
亦不符合BCNF
分解得:
attenMember(NGid,uider)
userAtten(Uid,NGid)
attenInfo(NGid, NGDatetime,NGnum,Nganme)
3.3 約束的說明
l 關系表中的外碼與主碼在4.1中定義。
l 需求分析階段的數據約束在4.2中定義。
4 數據庫應用設計
4.1 數據庫腳本
set nocount on
set dateformat ymd
use master
go
if not exists(select * from syslogins where name='weibouser')
exec sp_addlogin weibouser, weibouser
go
if exists(select *from sysdatabases where name=' weiboDB')
drop database weiboDB
go
--創建數據庫
create database weiboDB
--主數據庫
on primary
(name=' weiboDB ',
filename='c:\weibo\ hresourcesdb.mdf',
size=500,
maxsize=500000,
filegrowth=1)
--數據庫日志
log on
(name=' weiboDB log ',
filename='d:\ weibo \ weiboDB.ldf',
size=50,
maxsize=5000,
filegrowth=1)
go
/用戶user表*/
create table user(
Uid char(11) not null primary key --用戶編號
check(Uid like '[U][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Ualais varchar(20) not null --用戶妮稱
Uimage image not null --用戶頭像
Ulogon varchar(30) not null --郵箱(登陸名)
Upassswd varchar(20) not null --密碼
Usex char(1) not null --性別
Uname varchar(20) null --真實姓名
Uskin char(11) not null --皮膚編號
Uqq varchar(11) null --QQ
Uschool Char(11) null --畢業院校
Uwork varchar(20) null --職位
Utel char(10) null --手機號
Uinfo varchar(100) null --自我介紹
Udatetime datetime not null --注冊時間
Ublog varchar(50) null --個人博客
constraint PK1 foreign key(Uskin) references skin(Sid),
constraint PK2 foreign key(Uschool) references school(Sid),
)
Go
/* attenMember表*/
create table attenMember (
NGid Char(12) not null --關注組編號
Uider Char(11) not null --被關注者編號
constraint pK primary key(NG,Uider),
constraint PK1 foreign key(NGid) references attenInfo(NGid),
constraint PK1 foreign key(uider) references user(Uid)
)
go
/* userAtten表*/
create table attenGroup(
Uid Char(11) not null not null --用戶編號
NGid Char(12) not null not null --關注組編號
constraint pK primary key(Uid,NUid),
constraint PK1 foreign key(NGid) references attenInfo(NUid)
)
go
/* AttenInfo表*/
create table attenGroup(
NGid Char(12) not null primary key --關注組編號
check(NGid like '[U][G][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
NGDatetime Datetime not null --創建時間
NGnum Int not null --關注組人數
Ngname Varchar(20) not null --關注組名稱
)
go
/*院校school表*/
create table shcool(
Sid Char(11) not null primary key --院校編號
check(Sid like '[S][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Sname Varchar(10) not null --所在省
Spro Varchar(10) not null --所在市
Scity Varchar(10) not null --所在縣
Scountry Varchar(20) not null --院校名稱
)
go
/*標簽label表*/
create table label (
Lid Char(11) not null primary key --標簽編號
check(Lid like '[U][G][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Lname Varchar(10) not null --標簽內容
)
go
/*標簽Userlabel表*/
create table Userlabel (
Uid char(11) not null --用戶編號
Lid char(11) not null --標簽編號
constraint FK primary key(Uid,Lid),
constraint PK1 foreign key(Uid) references user(Uid),
constraint FK2 foreign key(Lid) references Label(Lid)
)
go
/*私信priMessage表*/
create table priMessage(
PMid Char(12) not null primary key --私信編號
check(PMid like '[P][M][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Uid Char(11) not null --發送者編號
RUid Char(11) not null --接收者編號
PMcontent Varchar(200) not null --私信內容
PMdatetime datetime not null --發送時間
constraint FK1 foreign key(RUid) references user(Uid),
constraint FK2 foreign key(Uid) references user(Uid)
)
go
/*微群groupMember表*/
create table groupMember (
Gid Char(16) not null primary key --微群編號
Uid Char(11) not null --微群用戶編號
constraint FK1 foreign key(uid) references user(Uid),
constraint FK1 foreign key(gid) references groupInfo(Gid)
)
go
/*微群groupInfo表*/
create table groupInfo(
Gid Char(16) not null primary key --微群編號
check(Gid like '[G][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Gname Varchar(20) not null --微群妮稱
Glabel Char(11) not null --微群標簽
Gnum Int not null --用戶數
Gdatetime Datetime not null --創建時間
constraint FK2 foreign key(Glabel) references label(Lid)
)
go
/*微群groupAdmin表*/
create table groupInfo(
Gid Char(16) not null primary key --微群編號
Gadmin Char(11) not null --群管理員
constraint PK1 foreign key(Gadmin) references user(uid),
)
go
/*相冊photoFolder表*/
create table photoFolder(
PFid Char(11) not null primary key --相冊編號
check(PFid like '[P][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Uid Char(11) not null --用戶編號
PFname Varchar(20) not null --相冊名稱
PFnum int not null --圖片數量
Pid Char(11) not null --圖片編號
constraint FK1 foreign key(Uid) references user(Uid)
)
go
/*圖片photo表*/
create table photo(
Pid Char(11) not null primary key --圖片編號
Check PGid like '[P][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9] [0-9] [0-9]')
Pname Varchar(20) not null --相片名稱
Photo Varbinary(5000) not null --圖片
)
go
/*皮膚skin表*/
create table skin(
Sid Char(11) primary key --皮膚編號
check(Sid like '[G][0-9][0-9][0-9][0-9][0-9]')
Simage Varbinary(2048) --背景圖片
Scolor Char(9) --RGB主題顏色
)
go
/*普通消息message表*/
Create table message(
Mid Char(16) not null primary key --消息編號
check(Gid like '[M][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
Uid Char(11) not null --用戶編號
Tid Char(16) null --話題編號
Cid Char(11) null --轉發編號
Mcontent Varchar(150) not null--消息內容
Mhttp Varchar(150) null --鏈接
Mfav Int not null --收藏次數
Mreply Int not null --評論次數
Mcopy Int not null --轉發次數
Mdatetime datetime not null --發表時間
constraint FK1 foreign key(uider) references user(Uid),
constraint FK2 foreign key(Uid) references copy(Cid)
constraint Fk3 foreign key(Uid) references messageTitle(Tid)
)
go
/*普通消息話題messageTitle表*/
create table messageTitle(
Tid Char(16) not null primary key --話題編號
check(Tid like '[T][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
Tnum Int not null --消息數量
Tname Varchar(20) not null --話題標題
Tcontent Varchar(1000) not null--話題簡介
)
go
/*普通消息評論messageReply表*/
create table messageReply(
Rid Char(16) not null primary key --評論編號
check(Rid like '[R][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
Mid Mid(16) not null --消息編號
Uid Uid(11) not null --用戶編號
Rdatetime Datetime not null --評論時間
Rcontent Varchar(200) not null --評論內容
constraint FK1 foreign key(Mid) references message(Mid),
constraint FK2 foreign key(Uid) references user(Uid)
)
go
/*群消息話題groupTitle表*/
create table groupTitle(
GTid Char(17) not null primary key --話題編號
check(GTid like '[G][T][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
Tnum Int not null --消息數量
Tname Varchar(20) not null --話題標題
Tcontent Varchar(1000) not null --話題簡介
)
go
/*微群消息評論groupReply表*/
create table groupReply(
GRid Char(17) not null primary key --微群消息評論編號
check(GRid like '[G][R][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
GMid Char(16) not null --群消息編號
Gid Char(16) not null --群編號
Uid Char(11) not null --用戶編號
GRdatetime datetime not null --評論時間
GRcontent Varchar(200) not null --評論內容
constraint FK1 foreign key(GMid) references groupMessage(Uid),
constraint FK2 foreign key(Gid) references group(Uid)
constraint FK3 foreign key(Uid) references user(Uid)
)
go
/*群消息groupMessage表*/
create table groupMessage(
GMid Char(17) not null primary key --群消息編號
check(GMid like '[G][M][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9][0-9]')
Gid Char(16) not null --群編號
Uid Char(11) not null --用戶編號
GTid Char(16) null --群話題編號
Cid Char(11) not null --轉發編號
Mcontent Varchar(150) not null --消息內容
Mhttp Varchar(150) not null --鏈接
Mreply Int not null --評論次數
Mcopy Int not null --轉發次數
GMdatetime datetime not null --發表時間
constraint FK1 foreign key(Gid) references group(Gid),
constraint FK2 foreign key(Uid) references user(Uid)
constraint FK3 foreign key(uider) references GroupTitle(GTid),
constraint FK4 foreign key(Cid) references Copy(cid)
)
go
/*收藏fav表*/
create table fav(
Fid Char(11) not null primary key --收藏編號
check(Fid like '[G][T][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ')
Uid Char(11) not null --用戶編號
Mid Char(16) not null --消息編號
constraint FK1 foreign key(Uid) references user(Uid),
constraint FK2 foreign key(Mid) references message(Uid)
)
go
/*關注attention表*/
create table attention(
Uid Char(11) not null --用戶編號
attUid Char(11) not null --被關注者編號
constraint pK primary key(Uid,attUid) ,
constraint FK1 foreign key(Uid) references user(Uid),
constraint FK2 foreign key(Mid) references message(Uid)
)
go
/*轉發copy表*/
create table copy(
Cid Char(11) not null primary key --轉發表編號
check(Fid like '[C][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ')
Uid Char(11) not null --用戶編號
Mid Char(16) not null --被轉發消息編號
CUid Char(11) not null --被轉發用戶編號
constraint FK1 foreign key(Mid) references Message(Mid),
constraint FK2 foreign key(Uid) references user(Uid),
constraint FK2 foreign key(CUid) references user(Uid)
)
go
4.2 數據庫完整性設計
主要是通過觸發器定義一些復雜的數據庫完整性要求。在本系統中用的較多的是插入觸發器,在數據約束已詳細描述。此處給予幾個簡單實現:
為方便處理首先規定所插入操作一次只允許插入一條記錄。
CREATE TRIGGER InsTrg
ON user --此處可用別相應的表取代
FOR INSERT
AS
DECLARE @ info char(11
IF ( SELECT count(*) FROM inserted )>1
ROLLBACK
1.用戶相冊不超過100個
CREATE TRIGGER pftrigger
ON photoFolder
FOR INSERT
AS
@info char(11);
Select @info=Uid from inserted
IF ( SELECT count(*) FROM phtotFolder a where @info=a.Uid)=100)
ROLLBACK
2.相冊圖片不超過500個
CREATE TRIGGER prigger
ON photo
FOR INSERT
AS
@info char(11);
Select @info=Uid from inserted
IF ( SELECT count(*) FROM phtot a where @info=a.Uid)=500)
ROLLBACK
3.關注組數量不超過50個
CREATE TRIGGER prigger
ON attenMember
FOR INSERT
AS
@info char(11);
Select @info=NGid from inserted
IF ( SELECT count(NGid) FROM attenMember where @info=aNGid)=50)
ROLLBAC
4.3 存儲過程設計
推存用戶類似的可能感興趣的用戶。
create procedure delayCount(@uid char(11))
as
begin
create table #tmp(
UId char(11);
)
declare @userId char(11)
declare myCur cursor for
select Uid
from user a
where @uid.Uschool=a.Uschool or
@uid.Uwork =a.Uwork
open myCur
fetch myCur into @userId
while(@@fetch_status=0)
begin
insert into #tmp values(@userId)
fetch myCur into @userId
end
close myCur
deallocate myCur
select * from #tmp
end
統計當天熱門話題前15話題編號,並返回,此處指普通消息。
create procedure delayCount(@date datetime)
as
begin
create table #tmp(
titleId char(11);
)
declare @titleId char(11)
declare myCur cursor for
select top 15 Tid
from messageTitle
where Ttime=@date
orderby Tnum desc
open myCur
fetch myCur into @titleId
while(@@fetch_status=0)
begin
insert into #tmp values(@titleId)
fetch myCur into @titleId
end
close myCur
deallocate myCur
select * from #tmp
end