本案例的一個(gè)主線元素即圖片,圍繞圖片,他的上級(jí)元素應(yīng)該是一個(gè)分類元素,而這個(gè)分類不同于以往的分類,因?yàn)檫@個(gè)分類是以用戶為單位的,也就是說,用戶可以擁有其“相冊(cè)”,這個(gè)相冊(cè)即是圖片的分類。因此分類也有一個(gè)上級(jí)元素,即用戶。
另外,我們還在這里設(shè)計(jì)了標(biāo)簽(又稱Tag),一個(gè)圖片可以擁有多個(gè)標(biāo)簽,一個(gè)標(biāo)簽也可能對(duì)應(yīng)了多個(gè)圖片,這是一個(gè)多對(duì)多的關(guān)系。
在數(shù)據(jù)庫中,多對(duì)多關(guān)系通常是這樣處理的:多對(duì)多關(guān)系的兩個(gè)元素,各用一個(gè)表存放,另外還有一個(gè)“關(guān)系表”,用來存放二者的對(duì)應(yīng)關(guān)系。舉例來說,本案例的標(biāo)簽部分可以這樣設(shè)計(jì),除圖片表外,加入一個(gè)標(biāo)簽表,在這里存放標(biāo)簽的唯一編號(hào),另外存放具體的標(biāo)簽名稱,在這二者之外,再加入關(guān)系表Photo2Tag,這個(gè)關(guān)系表有三個(gè)字段,第一是關(guān)系的唯一編號(hào)作為主鍵,另外兩個(gè)字段分別是圖片的唯一編號(hào)和標(biāo)簽的唯一編號(hào),當(dāng)某個(gè)圖片有某個(gè)標(biāo)簽時(shí),就在此表中加入一條記錄。這樣做的好處是關(guān)系分明,符合數(shù)據(jù)庫設(shè)計(jì)的范式,缺點(diǎn)在于程序編制麻煩,當(dāng)你取出圖片的標(biāo)簽時(shí),需要同時(shí)打開關(guān)系表和標(biāo)簽表,在關(guān)系表中查詢出圖片對(duì)應(yīng)的所有標(biāo)簽的編號(hào),再在標(biāo)簽表中查出這些編號(hào)對(duì)應(yīng)的標(biāo)簽名稱。
在本案例中,不采用這種方法,而是采用一種折衷的辦法,即,有標(biāo)簽表,但是沒有關(guān)系表,我們?cè)趫D片表中新增一個(gè)字段,放入所有的標(biāo)簽名稱。這樣做不符合數(shù)據(jù)庫范式,但是可以在程序編寫和查詢效率方面獲得一些提高。
除此之外,我希望告訴你的是,由于在本章的用戶模塊中設(shè)計(jì)了一個(gè)用戶找回密碼的功能,即當(dāng)用戶忘記密碼時(shí),可以在系統(tǒng)中輸入其注冊(cè)時(shí)的Email,系統(tǒng)將發(fā)送一封信件給該用戶,用戶點(diǎn)擊信件中的鏈接即可重設(shè)密碼,在這個(gè)過程中涉及一個(gè)密鑰認(rèn)證的環(huán)節(jié),因此我們?yōu)檫@里設(shè)計(jì)了一個(gè)表FindPass。
本章詳細(xì)的數(shù)據(jù)庫設(shè)計(jì)如下:
數(shù)據(jù)表Album的結(jié)構(gòu)如表8.1所示:
表8.1
字段 |
類型 |
描述 |
可否為空 |
默認(rèn)值 |
備注 |
AlbumID |
自動(dòng)編號(hào) |
相冊(cè)編號(hào) |
否 |
主鍵 | |
UserID |
數(shù)字 |
所屬用戶編號(hào) |
否 |
||
AlbumName |
文本 |
相冊(cè)名稱 |
否 |
||
AlbumCover |
文本 |
相冊(cè)封面 |
是 |
數(shù)據(jù)表Photo的結(jié)構(gòu)如表8.2所示:
表8.2
字段 |
類型 |
描述 |
可否為空 |
默認(rèn)值 |
備注 |
PhotoID |
自動(dòng)編號(hào) |
圖片編號(hào) |
否 |
主鍵 | |
UserID |
數(shù)字 |
所屬用戶編號(hào) |
否 |
||
AlbumID |
數(shù)字 |
所屬相冊(cè)編號(hào) |
否 |
0 |
|
PhotoName |
文本 |
圖片名稱 |
否 |
||
PhotoContent |
備注 |
圖片介紹 |
否 |
||
PhotoSourceUrl |
文本 |
圖片文件地址 |
否 |
||
PhotoTags |
文本 |
圖片Tag |
是 |
||
PhotoSize |
數(shù)字 |
圖片文件大小 |
否 |
0 |
|
PhotoPermission |
文本 |
圖片瀏覽權(quán)限 |
否 |
||
PhotoClick |
數(shù)字 |
圖片點(diǎn)擊量 |
否 |
0 |
|
PhotoVoteScore |
數(shù)字 |
圖片評(píng)分得分 |
否 |
3 |
|
PhotoVoteTotal |
數(shù)字 |
圖片評(píng)分人數(shù) |
否 |
1 |
|
PhotoAddTime |
日期/時(shí)間 |
圖片添加時(shí)間 |
否 |
Now() |
數(shù)據(jù)表ShareUser結(jié)構(gòu)如表8.3所示:
表8.3
字段 |
類型 |
描述 |
可否為空 |
默認(rèn)值 |
備注 |
UserID |
自動(dòng)編號(hào) |
用戶編號(hào) |
否 |
主鍵 | |
UserEmail |
文本 |
用戶Email |
否 |
||
UserNickName |
文本 |
用戶昵稱 |
是 |
||
UserPassword |
文本 |
用戶密碼 |
否 |
||
UserAddTime |
日期/時(shí)間 |
用戶注冊(cè)時(shí)間 |
否 |
Now() |
|
UserHead |
文本 |
用戶頭像 |
是 |
數(shù)據(jù)表Tag結(jié)構(gòu)如表8.4:
表8.4
字段 |
類型 |
描述 |
可否為空 |
默認(rèn)值 |
備注 |
TagID |
自動(dòng)編號(hào) |
Tag編號(hào) |
否 |
主鍵 | |
TagName |
文本 |
Tag |
否 |
||
TagCount |
數(shù)字 |
Tag使用次數(shù) |
否 |
0 |
數(shù)據(jù)表FindPass結(jié)構(gòu)如表8.5:
表8.5
字段 |
類型 |
描述 |
可否為空 |
默認(rèn)值 |
備注 |
FPID |
自動(dòng)編號(hào) |
編號(hào) |
否 |
主鍵 | |
UserID |
數(shù)字 |
對(duì)應(yīng)用戶編號(hào) |
否 |
||
PrivateKey |
文本 |
密鑰 |
否 |
||
FindAddTime |
日期/時(shí)間 |
申請(qǐng)時(shí)間 |
否 |
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇