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

标签 php mysql sql database table-relationships

好的,我正在创建一个小型社区网站。用户加入我的网站,他可以选择 输入他的信息上传照片添加 friend 并张贴到他的墙上。现在我想知道如何实现相册表。

相册具有以下属性:

albumID
albumName
albumCover
albumDescription
albumDate
albumPrivacy enum
userID
username

现在我想知道如何将专辑表与用户表链接起来。每个用户都有自己的 ID 和用户名。 usersId为主键,用户名唯一。
1 个用户可以拥有多个相册。 1 个相册只能属于 1 个用户。 我怎样才能建立关系???

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

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

最佳答案

username 是否在 Users 表中?如果是这样,那么您也不必担心将其也包含在专辑表中。

The usersId is primary key and the username is unique.

澄清一下,userID 应该是 Users 表上的主键,但应该是 Albums 表上的外键(如 matthewh 所述)。 “albumID”是应该作为 Albums 表主键的列。

您的 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 注入(inject)攻击。用户输入的风险更大,因此使用 session 变量应该没问题。但养成它仍然是一个好习惯。

关于php - 用户相册和照片的数据库表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8958143/

相关文章:

mysql - 我不确定 : Is this an anti-join?

用于表情符号/unicode 的 MySQL 正则表达式

MySQL - 初学者问题

php - 在结果字段上连接两个选择查询

php - Symfony 4.2 无法连接到 Microsoft SQL Server

java - 打破 @Query 的 LIMIT

mysql - SQL如何比较两个不同表中的两列

java - 用于定义类似于 XQuery 或 SQL 语句的规则和操作的 UI

php - 如何使用两个提交按钮,并区分使用哪个提交表单?

php - json_encode 不适用于 PDO 获取的数据