本案例的一个主线元素即图片,围绕图片,他的上级元素应该是一个分类元素,而这个分类不同于以往的分类,因为这个分类是以用户为单位的,也就是说,用户可以拥有其“相册”,这个相册即是图片的分类。因此分类也有一个上级元素,即用户。
另外,我们还在这里设计了标签(又称Tag),一个图片可以拥有多个标签,一个标签也可能对应了多个图片,这是一个多对多的关系。
在数据库中,多对多关系通常是这样处理的:多对多关系的两个元素,各用一个表存放,另外还有一个“关系表”,用来存放二者的对应关系。举例来说,本案例的标签部分可以这样设计,除图片表外,加入一个标签表,在这里存放标签的唯一编号,另外存放具体的标签名称,在这二者之外,再加入关系表Photo2Tag,这个关系表有三个字段,第一是关系的唯一编号作为主键,另外两个字段分别是图片的唯一编号和标签的唯一编号,当某个图片有某个标签时,就在此表中加入一条记录。这样做的好处是关系分明,符合数据库设计的范式,缺点在于程序编制麻烦,当你取出图片的标签时,需要同时打开关系表和标签表,在关系表中查询出图片对应的所有标签的编号,再在标签表中查出这些编号对应的标签名称。
在本案例中,不采用这种方法,而是采用一种折衷的办法,即,有标签表,但是没有关系表,我们在图片表中新增一个字段,放入所有的标签名称。这样做不符合数据库范式,但是可以在程序编写和查询效率方面获得一些提高。
除此之外,我希望告诉你的是,由于在本章的用户模块中设计了一个用户找回密码的功能,即当用户忘记密码时,可以在系统中输入其注册时的Email,系统将发送一封信件给该用户,用户点击信件中的链接即可重设密码,在这个过程中涉及一个密钥认证的环节,因此我们为这里设计了一个表FindPass。
本章详细的数据库设计如下:
数据表Album的结构如表8.1所示:
表8.1
字段 |
类型 |
描述 |
可否为空 |
默认值 |
备注 |
AlbumID |
自动编号 |
相册编号 |
否 |
主键 | |
UserID |
数字 |
所属用户编号 |
否 |
||
AlbumName |
文本 |
相册名称 |
否 |
||
AlbumCover |
文本 |
相册封面 |
是 |
数据表Photo的结构如表8.2所示:
表8.2
字段 |
类型 |
描述 |
可否为空 |
默认值 |
备注 |
PhotoID |
自动编号 |
图片编号 |
否 |
主键 | |
UserID |
数字 |
所属用户编号 |
否 |
||
AlbumID |
数字 |
所属相册编号 |
否 |
0 |
|
PhotoName |
文本 |
图片名称 |
否 |
||
PhotoContent |
备注 |
图片介绍 |
否 |
||
PhotoSourceUrl |
文本 |
图片文件地址 |
否 |
||
PhotoTags |
文本 |
图片Tag |
是 |
||
PhotoSize |
数字 |
图片文件大小 |
否 |
0 |
|
PhotoPermission |
文本 |
图片浏览权限 |
否 |
||
PhotoClick |
数字 |
图片点击量 |
否 |
0 |
|
PhotoVoteScore |
数字 |
图片评分得分 |
否 |
3 |
|
PhotoVoteTotal |
数字 |
图片评分人数 |
否 |
1 |
|
PhotoAddTime |
日期/时间 |
图片添加时间 |
否 |
Now() |
数据表ShareUser结构如表8.3所示:
表8.3
字段 |
类型 |
描述 |
可否为空 |
默认值 |
备注 |
UserID |
自动编号 |
用户编号 |
否 |
主键 | |
UserEmail |
文本 |
用户Email |
否 |
||
UserNickName |
文本 |
用户昵称 |
是 |
||
UserPassword |
文本 |
用户密码 |
否 |
||
UserAddTime |
日期/时间 |
用户注册时间 |
否 |
Now() |
|
UserHead |
文本 |
用户头像 |
是 |
数据表Tag结构如表8.4:
表8.4
字段 |
类型 |
描述 |
可否为空 |
默认值 |
备注 |
TagID |
自动编号 |
Tag编号 |
否 |
主键 | |
TagName |
文本 |
Tag |
否 |
||
TagCount |
数字 |
Tag使用次数 |
否 |
0 |
数据表FindPass结构如表8.5:
表8.5
字段 |
类型 |
描述 |
可否为空 |
默认值 |
备注 |
FPID |
自动编号 |
编号 |
否 |
主键 | |
UserID |
数字 |
对应用户编号 |
否 |
||
PrivateKey |
文本 |
密钥 |
否 |
||
FindAddTime |
日期/时间 |
申请时间 |
否 |
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛