2013-08-09 6 views
1

У меня возникла проблема моделирования этой ситуации. Я разрабатываю систему купонов на основе местоположения. Пользователь может определять зоны и предложения, а затем связывать каждое предложение с несколькими зонами. Также каждая зона может иметь более одного предложения. Таким образом, зона и предложение имеют много-много отношений. Пользовательский объект владеет обоими объектами. Зона и предложение могут быть связаны только в том случае, если один и тот же пользователь владеет обоими из них. Диаграмма может быть очень полезна. Спасибо.Проектирование отношения многих из многих между тремя объектами

+0

Этот вопрос не соответствует теме, поскольку речь идет о разработке программного обеспечения вместо разработки. –

ответ

2

Предполагая, что пользователь может иметь собственные зоны и предлагает независимо от ли на самом деле подключены зон и предложения, вы можете сделать что-то вроде этого:

enter image description here

Это классическая проблема ромбовидной зависимости, где алмаз нижнего должен ссылаться на тот же алмаз верха для как алмазов стороны, что обеспечивается с помощью , идентифицирующие отношения так, чтобы верхняя ПК распространяется вниз с обеих сторон, а затем объединены в нижней части (примечание FK1 и FK2 перед ZONE_OFFER.USER_ID).

Вы всегда можете добавить еще (суррогатные?) Ключи к этой модели, если есть внешние причины для этого, но эта базовая структура должна существовать в определенной форме или форме, чтобы обеспечить только зоны и предложения , такие же пользователь может быть подключенным.

0

Вот ваша модель базы данных:

Tbl_Zone 
    id_Zone not null 
    id_User not null 
    zoneDescription not null 
    .... 

Tbl_Offer 
    id_Offer not mull 
    id_User not null 
    offerDescription not null 
    .... 

Tbl_ZoneOffer 
    id_ZoneOffer 
    id_Zone not null 
    id_Offer not null 

Назад к правилу вашего пользователя, это будет частью вашей бизнес-логики, где столы будут фильтроваться до отображения:

SELECT * FROM Tbl_Zone WHERE id_User = myUserIdentifier 
SELECT * FROM Tbl_Offer WHERE id_User = myUserIdentifier 

и, для перечня предложений для каждой зоны:

SELECT zoneDescription, offerDescription FROM Tbl_ZoneOffer 
    INNER JOIN Tbl_Zone on Tbl_ZoneOffer.id_Zone = Tbl_Zone.id_Zone 
    INNER JOIN Tbl_Offer on Tbl_ZoneOffer.id_Offer = Tbl_Offer.id_Offer 
    WHERE Tbl_Zone.id_User = myUserIdentifier 
Смежные вопросы