История изменений
Исправление theNamelessOne, (текущая версия) :
Помогите это организовать
Чтобы сделать связь, надо из одной таблицы ссылаться на другую. Чаще всего в таблице A заводят столбец (комбинацию столбцов), в котором хранятся данные, уникально идентифицирующие какую-нибудь запись из таблицы B; при этом на этот столбец (комбинацию столбцов) обычно накладывают ограничение внешнего ключа — foreign key constraint.
Т.е., например, у нас есть таблицы Roles с суррогатным первичным ключём (surrogate primary key) id, в котором хранятся идентификаторы ролей (ключи ещё могут быть натуральными, но это сейчас не важно):
id | name |
|---|---|
| 1 | admin |
| 2 | free user |
| 3 | paying user |
В таблице Users тогда заводим столбец role_id, в котором для каждой записи пользователя хранится идентификатор его роли:
id | full_name | role_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, в котором хранятся идентификаторы ролей (ключи ещё могут быть натуральными, но это сейчас не важно):
id | name |
|---|---|
| 1 | admin |
| 2 | free user |
| 3 | paying user |
В таблице Users тогда заводим столбец role_id, в котором для каждой записи пользователя хранится идентификатор его роли:
id | full_name | role_id |
|---|---|---|
| 1 | Вася Пупкин | 3 |
| 2 | Иван Иванов | 1 |
Т.е. у пользователя Вася Пупкин роль paying user, у Ивана Иванова — admin.
(Если ты на 100% уверен, что с ролями не будут связаны никакие дополнительные данные, то можно вообще обойтись без отдельной таблицы для ролей, а вместо этого обойтись ENUM-ами — не знаю, правда, поддерживает ли их MySQL.)
Чтобы организовать связь many-to-many, тебе понадобится т.н. таблица связи (join table). Это по сути обычная таблица, только в ней записи ссылаются сразу на несколько других таблиц. Например, в твоём случае имеет смысл иметь таблицу связи PlaylistSongs, в которой будут ссылки и на записи из таблицы Playlists, и на записи из таблицы Songs.
ткните, что почитать
Рекомендую почитать мануал PostgreSQL, очень понятно всё расписано.