История изменений
Исправление 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, очень понятно всё расписано.