【问题标题】:Simple Photo Sharing Site: How to structure the MySQL database for multiple users and their photos简单的照片共享站点:如何为多个用户及其照片构建 MySQL 数据库
【发布时间】:2012-05-08 18:42:54
【问题描述】:

我是一名学习 PHP 和 MySQL 的高中生。我正在尝试创建一个简单的照片共享网站,允许用户注册并开始上传图片。每个用户都有一个显示他们所有照片的个人资料。

我目前只有一张表,名为“users”:用户名、电子邮件、密码

我应该如何为图片设置一个表格?以及如何链接到每张图片的文件路径?

谢谢

【问题讨论】:

    标签: php mysql database-schema photos


    【解决方案1】:

    在您的用户表上创建一个名为 Id 的列(这永远不会改变) 您通常为此使用 INT AUTOINCREMENT 编号,以便数据库自动分配它,并且应将其标记为 PRIMARY KEY

    创建一个名为 photos 的表格

    Table photos
    Id = autoincrement primary key
    UserID = int (you can set this up as a foreign key, but to keep it simple, just make it indexed)
    Title = varchar
    Info = varchar
    Filename = varchar
    
    Table Photos
    Id      |  UserId  | Title    | info | Filename  | (add other columns to suit)
    ------------------------------------------------------------
    1       |  1       | Duck     | xyz  | duck.jpg  | 
    2       |  1       | Cat      | xyz  | cat.jpg   | 
    3       |  2       | Mouse    | xyz  | mouse.jpg | 
    

    从上面的数据可以看出 照片 1 和 2 属于用户 1 并且照片 3 属于用户 2

    要为用户名“bob”选择所有照片,您可以这样做

    SELECT Photos.Id, Photos.Filename 
    FROM Photos 
    JOIN Users ON Photos.UserId=Users.Id
    WHERE Users.username = 'bob'
    

    【讨论】:

      【解决方案2】:

      第一个问题是您将用户的照片存储在哪里?我会推荐这个:

      Table (User's):
      Username | Password | Email
      ---------------------------
      user1    | fdgfdg   | fdfgdf
      user2    | ffdgfd   | fgdfgf
      user3    | dgfdgg   | fgdgdd
      

      然后,每当用户注册时,使用该用户的名称创建一个文件夹和一个名为 photos 的子目录。

      为每个用户创建一个表。

      Table user1
      Photo     | Title    | info
      ----------------------------
      duck.jpg  | My Duck! | fgdf
      cat.png   | Le Cat   | dfgd
      

      然后,当用户登录时,列出所有标题并将它们动态链接到照片。

      所以我会是

      My Duck --> http://mysite.com/user1/photos/myduck.jpg
      

      如果 user1 是登录用户名,照片将自动添加,myduck.jpg 将从数据库中提取。

      但是,这会打开两个漏洞: - 盗链 - 如果有人知道用户名和照片标题,他们可以在未经许可的情况下访问照片。

      【讨论】:

      • 不要为每个用户创建一个表,这不是好的数据库设计。阅读第三范式。您不应该在每次用户注册时都创建新表
      • 我意识到这不是好的设计,我永远不会在 Web 应用程序中使用它,但他是初学者,所以我认为这会更简单/更容易实现。
      猜你喜欢
      • 2011-02-21
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2012-08-09
      • 2021-12-04
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多