LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

Помогите это организовать

Чтобы сделать связь, надо из одной таблицы ссылаться на другую. Чаще всего в таблице A заводят столбец (комбинацию столбцов), в котором хранятся данные, уникально идентифицирующие какую-нибудь запись из таблицы B; при этом на этот столбец (комбинацию столбцов) обычно накладывают ограничение внешнего ключаforeign key constraint.

Т.е., например, у нас есть таблицы Roles с суррогатным первичным ключём (surrogate primary key) id, в котором хранятся идентификаторы ролей (ключи ещё могут быть натуральными, но это сейчас не важно):

idname
1admin
2free user
3paying user

В таблице Users тогда заводим столбец role_id, в котором для каждой записи пользователя хранится идентификатор его роли:

idfull_namerole_id
1Вася Пупкин3
2Иван Иванов1

Т.е. у пользователя Вася Пупкин роль paying user, у Ивана Иванова — admin.

(Если ты на 100% уверен, что с ролями не будут связаны никакие дополнительные данные, то можно вообще обойтись без отдельной таблицы для ролей, а вместо этого обойтись ENUM-ами — не знаю, правда, поддерживает ли их MySQL.)

Чтобы организовать связь many-to-many, тебе понадобится т.н. таблица связи (join table). Это по сути обычная таблица, только в ней записи ссылаются сразу на несколько других таблиц. Например, в твоём случае имеет смысл иметь таблицу связи PlaylistSongs, в которой будут одновременно ссылки и на записи из таблицы Playlists, и на записи из таблицы Songs.

ткните, что почитать

Рекомендую почитать мануал PostgreSQL, очень понятно всё расписано.

Исходная версия theNamelessOne, :

Помогите это организовать

Чтобы сделать связь, надо из одной таблицы ссылаться на другую. Чаще всего в таблице A заводят столбец (комбинацию столбцов), в котором хранятся данные, уникально идентифицирующие какую-нибудь запись из таблицы B; при этом на этот столбец (комбинацию столбцов) обычно накладывают ограничение внешнего ключаforeign key constraint.

Т.е., например, у нас есть таблицы Roles с суррогатным первичным ключём (surrogate primary key) id, в котором хранятся идентификаторы ролей (ключи ещё могут быть натуральными, но это сейчас не важно):

idname
1admin
2free user
3paying user

В таблице Users тогда заводим столбец role_id, в котором для каждой записи пользователя хранится идентификатор его роли:

idfull_namerole_id
1Вася Пупкин3
2Иван Иванов1

Т.е. у пользователя Вася Пупкин роль paying user, у Ивана Иванова — admin.

(Если ты на 100% уверен, что с ролями не будут связаны никакие дополнительные данные, то можно вообще обойтись без отдельной таблицы для ролей, а вместо этого обойтись ENUM-ами — не знаю, правда, поддерживает ли их MySQL.)

Чтобы организовать связь many-to-many, тебе понадобится т.н. таблица связи (join table). Это по сути обычная таблица, только в ней записи ссылаются сразу на несколько других таблиц. Например, в твоём случае имеет смысл иметь таблицу связи PlaylistSongs, в которой будут ссылки и на записи из таблицы Playlists, и на записи из таблицы Songs.

ткните, что почитать

Рекомендую почитать мануал PostgreSQL, очень понятно всё расписано.