Я не уверен, как задать этот вопрос, так что я буду как можно яснее с примером.Схема: двусторонние отношения? какая таблица/организация должна иметь «предпочтение»?
В приложении, таком как facebook, профиль может иметь несколько профилей ProfilePictures. В любой момент времени один из них является «выбранным» ProfilePicture (при условии, что профиль ProfilePicture был загружен).
Инстинктивно, я бы смоделировать это так:
Table: Profile
--------------
ProfileID
SelectedProfilePictureId //fk to ProfilePicture
Name, Age, Etc
Table: ProfilePicture
---------------------
ProfilePictureId
ProfileId //fk to Profile, indicating which Profile this picture belongs to
Url, DateTaken, Etc
На данный момент, эти таблицы указывают друг на друга, и это только кажется, «неправильно» мне. Это упрощает запрос для профилей без SelectedProfilePictures или для получения ProfilePicture профиля, но вставки и обновления немного неудобны.
Это плохая форма? Должна ли таблица профилей быть полностью независимой от таблицы ProfilePicture? Есть ли «правильный» способ моделировать это в соответствии с теорией проектирования баз данных, или это зависит от описания программиста?
Мне удалось создать круглые ссылки в Sql Server 2008 R2, но это было немного взломать (я не смог создать новый ProfilePicture и установить поле ProfileProfileId профиля во время одной и той же транзакции, например). – smalltowndev
Итак, вы говорите, что третья таблица нарушает круговую ссылку, потому что таблица профиля больше не ссылается на таблицу ProfilePicture? И таблица PreferredPictures имела бы взаимно-однозначную связь с каждой таблицей Profiles и ProfilePictures?Каким будет первичный ключ таблицы PreferredPictures? (извините за столько вопросов!) – smalltowndev
Это имеет смысл ... спасибо за информацию и искусство ascii! Я отвечу на ваш ответ, как только мне удастся получить 15 «репутацию» на этом сайте. – smalltowndev