Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MySql (MyISAM). 1 объект во многих группах. Как правильнее реализовать группы.

41K
11 марта 2010 года
fe120
10 / / 09.12.2008
Доброго времени суток всем.
В сущности изучаю QT и связку его с мускулом. Но суть не в этом. И так к проблеме.
условно в рамках этого топика имеем 2 таблицы:
Код:
mysql>show tables;
+-------------------------+
| Tables_in_myBase |
+-------------------------+
| groups                  |
| musicComposition        |
+-------------------------+

mysql> describe musicComposition;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| id          | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| author      | varchar(512)        | NO   | MUL | NULL    |                |
| name        | varchar(512)        | NO   | MUL | NULL    |                |
| album       | varchar(512)        | YES  | MUL | NULL    |                |
| yearOfAlbum | year(4)             | YES  |     | NULL    |                |
| path        | mediumtext          | NO   |     | NULL    |                |
| styleId     | tinyint(3) unsigned | NO   | MUL | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+

mysql> describe groups;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | tinyint(3) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)        | NO   |     | NULL    |                |
| redColor   | tinyint(3) unsigned | NO   |     | NULL    |                |
| greenColor | tinyint(3) unsigned | NO   |     | NULL    |                |
| blueColor  | tinyint(3) unsigned | NO   |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

Как можно заметить строки в первой таблице описывают основной объект, где есть его primary key = id. Вторая же таблица описывает всевозможные группы к которым может принадлежать основной объект из 1 таблицы. Суть в том что объект может принадлежать к нескольким группам одновременно. А групп может быть неограниченное количество, так что вариант с ENUM отпадает.

Самым очевидным напрашивается создание для каждой группы отдельной таблицы, имя которой будет совпадать с именем группы из 2 таблицы. И в которой будут уже записаны id основных объектов, которые принадлежат к определенной в таблице группе.
Мне этот вариант кажется расточительным, да и не верным. Есть так же и другие мысли где будет общая 3 таблица со столбцами id основного объекта id группы, но тогда неизбежно повторения одних и тех же значений по столбцам...тоже не кажется лучшим выходом.
Как лучше реализовать подобное?

Заранее спасибо всем откликнувшимся.
274
11 марта 2010 года
Lone Wolf
1.3K / / 26.11.2006
Самым очевидным является создание таблицы где два поля: ИД объекта и ИД группы. Если есть такая связка, значит Объект состоит в этой группе

Стандартная связка многие-ко-многим
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог