Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > несколько значений в поле


Автор: DsKTY 21.2.2008, 22:21
Доброго времени суток. 
Допустим есть 2 таблицы users (с полями name и group) и groups (с полями id и info). Если пользователь входит в какую-то группу, то в users.group будет указан номер этой группы. Вопрос такой: как сделать так что бы пользователь мог принадлежать нескольким группам, т.е. указать в users.group несколько значений ссылающихся на разные строки в groups??  

Автор: skyboy 21.2.2008, 22:52
ввести дополнительную таблицу users_and_groups где будет два поля: idgroup и iduser. оба поля будут входить в состав первичного ключа(составной ключ получается), в принципе, поле-идентификатор(автоинкрементное поле) при таком раскладе не обязательно.
таким образом, входждение определенного пользователя в определенную группу будет фиксироваться при помощи отдельной записи из двух полей. уникальность сочетания пользователь + группа(чтоб пользователь не мог войти в одну и ту же группу дважды) гарантируется механизмом первичного ключа. удалить пользователя из группы можно удалением одной конкретной записи из этой таблицы. посчитать количество пользователей в группе и групп, к которым принадлежит пользователь, тоже не составит труда: с использованием count(*).
само вынесение связей в отдельную таблицу является частью процесса, называемого нормализацией и призванного упростить работу с проектируемой базой данных.

Автор: DsKTY 22.2.2008, 13:41
хм.. .действительно. как-то не подумал про отдельную таблицу. спасибо smile

Автор: skyboy 22.2.2008, 14:46

M
skyboy
Если вопрос решен, пометь его решенным!

Чтобы пометить вопрос решенным найди над своим первым постом темы в правом верхнем углу поста ссылку "Пометить вопрос решенным!"

Добавлено через 1 минуту и 37 секунд
кстати говоря, ситуации, когда делать отдельную таблицу под связи не так рационально, как писать несколько значений в одно поле через разделитель(скажем, ээээ... запятую), достаточно редки. потому лучше сделать вариант с выделением связей в отдельную таблицу приоритетным в голове(при проектировании БД)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)