用户相册和照片的数据库表结构

时间:2012-01-22 01:03:26

标签: php mysql sql database table-relationships

好的我正在创建一个小社区网站。用户加入我的网站,他可以选择 输入他的信息上传照片添加朋友并发布到他的墙上。到现在为止我想知道如何实现专辑表。

相册具有以下属性:

albumID
albumName
albumCover
albumDescription
albumDate
albumPrivacy enum
userID
username

现在我想知道如何将相册表与users表相关联。每个用户都有自己的ID和用户名。 usersId是主键,用户名是唯一的 1位用户可以拥有多张专辑。 1张专辑只能属于1个用户。 我怎么能建立关系?

请帮助,因为我不擅长数据库,我希望以优化和安全的方式完成工作。

到目前为止,我使用userid和username作为相册表中的属性来识别哪个相册属于谁。像这样SELECT * FROM albums WHERE userid='$userid' AND username ='$username'
其中$ userid是会话变量的值,$ username是会话变量的值。

2 个答案:

答案 0 :(得分:2)

你做的方式非常正确。您只需要在相册表中包含userID列,因为它是用户表中的主键,因此保证是唯一的。在专辑表中使用用户名列是多余的。

您只需要确保相册表中的userID列定义为FOREIGN KEY,当然还应用了索引。

答案 1 :(得分:2)

Users表中是否有用户名?如果是这样,那么您也不必担心将其包含在“相册”表中。

  

usersId是主键,用户名是唯一的。

为了澄清,userID应该是Users表上的主键,但是Albums表上的外键(如提到的那样)。 “albumID”是应该是“专辑”表的主键的列。

您的SELECT SQL也可以简化,因为您不应该在WHERE子句中使用用户名。我将假设用户不能拥有多个用户名,因此只在WHERE中声明userID就足够了。

但是,如果您仍希望在“相册”结果集中看到用户名,则可以执行以下操作:

SELECT a.*, u.username
FROM albums a
INNER JOIN users u ON u.userid = a.userid
WHERE a.userid='$userid';

另外,我觉得有必要提一下,你应该真正参数化你的SQL语句(在PHP代码中),而不是将SQL命令字符串连接在一起。这将保护它免受SQL注入攻击。用户输入会带来更大的危险,因此使用会话变量应该没问题。但这仍然是一个很好的习惯。