many-to-many и many-to-one relationships в django

Часто спрашивают, что значит в моделях django:
one-to-one
one-to-many
many-to-one
many-to-many

Это все из теории баз данных. Немножко распишу.

one-to-one -> один к одному
это говорит что бве таблицы между собой связываются по 1 полю и в каждой из них это поле имеет 1 единственное уникальное значение.
для примера если у вас есть таблица users ( id, login, pass ) и таблица profile( id, user_id, name, icq )
Так вот тут например для каждого пользователя не можно создавать 2 профиля поэтому будет связь 1 к 1 то есть для 1 пользователя 1 профиль. и связь через поля user.id = profile.user_id

one-to-many -> один ко многим
Наиболее распространенная связь например 1 пользователь может быть автором многоих постов
для примера если у вас есть таблица users ( id, login, pass ) и таблица posts( id, user_id, title, postbody)
в таблице user - запись об 1 пользователе будет связана внешним ключем с таблицей posts и выбираться будут записи по такому же условии user.id = posts.user_id

many-to-one -> многие к одному
Тут все то же самое что и one-to-many только с точностью до наоборот. этим мы говорим что у многих постов есть только 1 автор. и для конкретного заданного поста мы вытягиваем информацию из таблицы user по такому условию posts.user_id = user.id

many-to-many -> многие ко многие
один из сложных видов связывания 2 таблиц. В джанго он происходит посредством создания 3-й таблицы
например у нас есть users ( id, login, pass ) и profile( id, user_id, name, icq, friends )
тут помимо связи one-to-one через поле friends связано с таблицей users - то есть у этого пользователя есть друзья, но при этом у каждого друга есть свой профиль. Получается что много записей из profile надо связать со многими записями users и иметь обратную связь.
Для такой связи джанго ( как зачастую и делается по простому) создает 3-ю таблицу связей например profile_user_friends где есть 2 обычные связи many-to-one , в данном случае будут поля profile_user_friends ( id, profile_id, friends_id), где в friends_id заносятся значения user.id
Вот таким вот образом мы говорим что у этого профиля есть друзья с такими user.id, а зная user.id друзей мы уже можем подтянуть профили этих пользователей.

Надеюсь доступно :)

Следующая запись

Предыдущая запись

Связанные записи

Похожие записи

Комментарии

Еще нет комментариев.

Пингбэки

Оповещения открыты.

Трэкбэки

URL архива

Only authorized users can post comments