Лучшая практика для связанных записей - PullRequest
0 голосов
/ 27 сентября 2011

Привет! Мне нужна возможность связать связанные приложения, и я пытаюсь определить структуру таблицы с рекомендациями для сохранения, обновления и удаления.

У меня есть следующая таблица:

APPLICATION{ApplicationId, Name, Description}

Мне нужно сказать, что Приложение 1 связано с 2 и 3. Поэтому, если вы откроете приложение 2, вы увидите, что оно связано с приложениями 1 и 3. Затем приложение 3 связано с 1 и 2.

Какова лучшая структура таблицы для связанной таблицы?

EDIT

Мой основной запрос: мне понадобится запись для каждого соединения, т. Е. Для приложений 1, 2 и 3 мне понадобится 6 записей? 1-> 2, 1-> 3, 2-> 1, 2-> 3, 3-> 1, 3-> 2 ?? Если нет, то какой запрос лучше всего вернуть всем связанным приложениям для данного идентификатора?

Ответы [ 6 ]

5 голосов
/ 27 сентября 2011
application_association
-------------------------
application_1_id
application_2_id
relationship_type
begin_dt
end_dt

используйте тип_отношения, чтобы указать, как связаны приложения, и даты, чтобы указать, когда это отношение было действительным.

редактировать

возможно, существует коллективное неверное истолкование вашего использования слова "связанный".

Если вместо этого вы имеете в виду «сгруппированный», вы можете рассмотреть такую ​​структуру:

group
------------------
group_id
name

application_group
-------------------
application_id
group_id

здесь вы можете просто поместить приложения в одну и ту же «группу» и затем запросить их все обратно, когда они находятся в одной группе.

1 голос
/ 27 сентября 2011

Еще две таблицы.

Одна для типа ассоциации:

create table ApplicationAssocType
(
    Id int identity(1,1)
   ,[Description] varchar(128) not null
)

И одна для самой ассоциации:

create table ApplicationAssoc
(
    Id int identity(1,1)
   ,ApplicationId1 int not null references Appliation(ApplicationId)
   ,ApplicationId2 int not null references Appliation(ApplicationId)
   ,ApplicationAssocTypeId int not null references ApplicationAssocType(Id)
)

[Изменить]Добавить запись для каждой отдельной ссылки.Добавьте любые поля в ApplicationAssoc, которые относятся к отношениям между указанными приложениями.

0 голосов
/ 27 сентября 2011

Вам нужна таблица ссылок, которая в основном позволяет вам иметь отношение «многие ко многим» между Application и самим собой.

CREATE TABLE lnkApplication
(ApplicationID1 int, ApplicationID2 int)

GO
ALTER TABLE [dbo].[lnkApplication]  WITH NOCHECK 
ADD  CONSTRAINT [FK_ApplicationLink1] FOREIGN KEY([ApplicationID1])
REFERENCES [dbo].[tblApplication] ([ApplicationID])
GO
ALTER TABLE [dbo].[lnkApplication]  WITH NOCHECK 
ADD  CONSTRAINT [FK_ApplicationLink2] FOREIGN KEY([ApplicationID2])
REFERENCES [dbo].[tblApplication] ([ApplicationID])
GO
0 голосов
/ 27 сентября 2011
LinkedApplication{ID, ApplicationId, LinkedApplicationId}
0 голосов
/ 27 сентября 2011

Прикладная сущность имеет много-много-многократную связь с самим собой, поэтому вам нужна другая таблица для хранения этого отображения:

APP_Relationship (ApplicationId, RelatedApplicationId)
0 голосов
/ 27 сентября 2011

CREATE TABLE AppLink (App1 int, App2 int)

Это бесконечно расширяется на столько отношений, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...