Структура таблицы базы данных для пользовательских альбомов и фотографий - PullRequest
3 голосов
/ 22 января 2012

Хорошо, я создаю небольшой сайт сообщества.Пользователь присоединяется к моему сайту, и у него есть возможность ввести свою информацию, загрузить фотографии, добавить друзей и опубликовать на своей стене.Сейчас я хочу знать, как реализовать таблицу альбомов.

Альбом имеет следующие атрибуты:

albumID
albumName
albumCover
albumDescription
albumDate
albumPrivacy enum
userID
username

Теперь я хочу знать, каксвязать таблицу альбомов с таблицей пользователей.У каждого пользователя есть свой идентификатор и имя пользователя.ИД пользователя - это первичный ключ, а имя пользователя уникально.
1 пользователь может иметь много альбомов.1 альбом может принадлежать только 1 пользователю.Как я могу установить отношения ???

Помогите пожалуйста, потому что я не очень хорош в базах данных, и я хочу, чтобы все было сделано оптимизированным и безопасным способом.

К настоящему времени я использую usersid и username какатрибуты в таблице альбомов, чтобы определить, кому принадлежит какой альбом.как это SELECT * FROM albums WHERE userid='$userid' AND username ='$username'.
Где $ userid - это значение из переменной сеанса, а $ username - это значение из переменной сеанса.

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Имя пользователя в таблице Users?Если это так, то вам не нужно беспокоиться о включении его в таблицу альбомов.

ИД пользователя является первичным ключом, а имя пользователя уникальным.

Просто чтобы уточнить, userID должен быть первичным ключом в таблице Users, но внешним ключом в таблице Albums (как уже упоминалось).«albumID» - это столбец, который должен быть первичным ключом для таблицы «Albums».

Ваш SELECT SQL также может быть упрощен, так как вам не нужно вводить имя пользователя в предложении WHERE.Я собираюсь предположить, что пользователи не могут иметь несколько имен пользователей, поэтому достаточно указать только userID в вашем WHERE.

Однако, если вы все еще хотите видеть имя пользователя в наборе результатов ваших альбомов, вы можете сделатьthis:

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

Также я вынужден упомянуть, что вам действительно нужно параметризовать ваш оператор SQL (в вашем коде PHP) вместо того, чтобы объединять командную строку SQL вместе.Это защитит его от атак SQL-инъекций.Это большая опасность для пользовательского ввода, поэтому использование переменной сеанса должно быть в порядке.Но это все еще хорошая привычка.

2 голосов
/ 22 января 2012

То, как вы это сделали, в значительной степени правильно.Вам нужно только иметь столбец userID в таблице альбомов, поскольку он является первичным ключом в пользовательской таблице и, таким образом, гарантированно будет уникальным.Наличие столбца имени пользователя в таблице альбомов является излишним.

Вам просто нужно убедиться, что столбец userID в таблице альбомов определен как FOREIGN KEY и, конечно, к нему применен индекс.

...