【问题标题】:PHP/MySQL Structuring a Table/Database for Profile UsagePHP/MySQL 为配置文件使用构建表/数据库
【发布时间】:2009-07-29 01:04:01
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php mysql database-design


    【解决方案1】:

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

    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 动态创建它(我也将用户目录保留为整数,而不是使用只是为了演示的“用户”)。

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

    【讨论】:

      【解决方案2】:

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

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

      UserImagesimage 属性将是一个二进制对象,用于存储完整图像或文件系统上某个位置的 url。在第二种情况下,您需要代码来获取图像(如果需要)。 type 属性采用值“主要个人资料”、“主要头像”、“其他个人资料”

      如果预计图片的数量会很大,你可以修改设计如下

      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 设置为 userImages 表的 FK,确保不会在用户表上为 profileImageID 和 profileImage 列发生直接插入。这仍然会导致 profileImage 对恶意更新开放。你需要特殊的代码来处理它。如果您希望成为下一个互联网红人,您需要做这一切!一切顺利,希望你能成为其中的一员!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 2012-04-23
        • 1970-01-01
        • 2013-12-08
        相关资源
        最近更新 更多