PHP / MySQL为配置文件使用构建表/数据库

时间:2009-07-29 01:04:02

标签: php mysql database-design

我正在寻找关于如何在我的网站上为用户构建数据库的最有效方法的一些方向。

基本上,我已经有一个“tblusers”数据库,其中包含基本的传记信息,例如:       向tblUsers:       UsrID,First,Last,DOB,电话号码等

然而,我的网站的一个方面包括(将包括)用户可以上传他们自己的多张图片的区域,从这些图片中他们可以选择一张作为其默认的“个人资料”图片。此外,他们还可以“裁剪”他们的任何一张照片,以创建“缩略图头像”。

所以基本上,我正在寻找一些关于构建表格的帮助:1)多张图片,2)能够更改默认的个人资料图片,3)能够创建和使用缩略图/头像。我认为这将基于该用户的“usrID”,但我不确定格式化表格的最佳方式。

最后,关于如何维护将上传到不同配置文件的所有图片的“文件结构”的任何建议也会有所帮助。

任何帮助都会很棒!谢谢。

2 个答案:

答案 0 :(得分:0)

我会为用户的图像创建一个表格,其中包含头像和个人资料的标记...(或者为图像和头像创建多个表格)

CREATE TABLE users_images (
    `id` int(10) unsigned auto_increment,
    `userid` int(10) unsigned NOT NULL,
    `name` varchar(255) NOT NULL, -- Filename for the image
    `isavatar` tinyint(1) DEFAULT 0,
    `isprofile` tinyint(1) DEFAULT 0,
    PRIMARY KEY(id)
) ENGINE=InnoDB CHARSET=utf8;

这取决于您想要存储多少数据。以上允许一个用户拥有任意数量的图像。 就个人而言,我可能会创建一个使用用户ID作为基础目录的文件夹结构;

 - Uploads
    -user1
     -file1.jpg
    -user2
     -file1.jpg
     -file2.jpg
    -etc

然后你不需要在数据库中指定路径,你可以使用用户的id动态创建它(我也将用户目录保持为整数,而不是使用仅用于演示的'user')。 / p>

希望有所帮助,如果您需要更多帮助,请告诉我。

答案 1 :(得分:0)

您是否考虑使用Gravatar(如stackoverflow)来存储用户图像?这似乎是一个很酷的主意!如果您有兴趣,请访问www.gravatar.com。 Gravatar代表全球公认的头像。 我建议将用户信息和图像存储在单独的表中。选择很明显,因为用户和图像之间存在一对多的关系。但是,您可以使用变体来提高性能,并在每次需要显示用户数据时避免连接。

User(userID, loginName, loginPwd)
UserImages(imageID, userID, image,type)

UserImages 图像属性将是一个二进制对象,将完整图像或网址存储到文件系统上的某个位置。在第二种情况下,您需要代码来获取图像(如果需要)。 type属性采用值'primary profile','primary avatar','other profiles'

如果预计图像数量非常大,您可以按如下方式修改设计

User(userID, loginName, loginPwd, profileImageID, profileImage)
UserImages(imageID, userID, image,type)

填充profileImageID和ProfileImage的SQL

Update User T1
set (profileImageID, profileImage) = (Select imageID, image 
                                      from UserImages T2
                                      where T1.userID = T2.userID 
                                        and T2.type='primary profile'
                                     )  

它可能看起来像用户表中的冗余数据存储。这个想法有时用于通过避免连接来提高性能。此外,您需要确保通过将profileImageID设置为用户图像表的FK,可以在“用户”表上为profileImageID和profileImage列进行直接插入。这仍然会导致profileImage对恶意更新开放。你需要特殊的代码来处理它。如果您希望成为下一个互联网轰动,您需要做到这一切!一切顺利,让我们希望你成为一个人!