2012-07-03 5 views
1

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

ответ

4

Отношения N: M обычно моделируются как дополнительная таблица в вашей базе данных. Итак, у вас будет Member-table, Group-table и MemberInGroup-table, где вы просто сохраните оба первичных ключа.

Как это:

+----+----------------+  +----+---------------+  +-----+----+----+ 
    |m_id|member   |  |g_id|group   |  |mg_id|m_id|g_id| 
    +----+----------------+  +----+---------------+  +-----+----+----+ 
    |1 |tom    |  |1 |groupA   |  |1 |1 |1 | 
    |2 |tim    |  |2 |groupB   |  |2 |1 |2 | 
    |3 |michael   |  +----+---------------+  |3 |2 |1 | 
    +----+----------------+         +-----+----+----+ 

Ваших идея - хранить несколько значений атрибутов в ваших Member -столах конфликтов с первой нормальной формой (http://en.wikipedia.org/wiki/Database_normalization#Normal_forms), которая гласит, что каждый атрибут должен иметь одно значение.

+0

Это замечательно - я (очевидно) новичок в этом! – DaveR

1

Это классический many to many relationship.

A Junction table не требуется, это будет содержать первичные ключи из двух таблиц.

Вам понадобится 3 таблицы - элементы, группы и новая таблица соединений, которую вы могли бы назвать членами_групп.

+0

Большое спасибо! – DaveR

Смежные вопросы