相关记录的最佳sql实践

时间:2011-09-27 13:05:37

标签: sql database-design join

您好,我需要能够链接相关的应用程序,并试图找出保存,更新和删除的最佳实践表结构。

我有下表:

APPLICATION{ApplicationId, Name, Description}

我需要能够说应用程序1链接到2和3.因此,如果打开应用程序2,您会看到它已链接到应用程序1和3.然后应用程序3链接到1和2。 / p>

链接表的最佳表结构是什么?

修改

我的主要查询是我需要每个连接的记录,即对于应用程序1,2和3,我需要6条记录吗? 1-> 2,1-> 3,2-> 1,2-> 3,3-> 1,3-> 2'-如果不是,返回给定ID的所有链接应用程序的最佳查询是什么?

6 个答案:

答案 0 :(得分:5)

application_association
-------------------------
application_1_id
application_2_id
relationship_type
begin_dt
end_dt

使用relationship_type指定应用程序的关联方式,并使用日期指定该关系何时有效

修改

也许对你使用“链接”这个词有一个集体的误解。

如果你的意思是“分组”,那么你可以考虑如下结构:

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

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

在这里,你可以将应用程序放入同一个“组”中,然后当它们位于同一组时再查询它们。

答案 1 :(得分:1)

另外两张桌子。

一个用于关联类型:

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,这些字段与指定的应用程序之间的关系有关。

答案 2 :(得分:0)

CREATE TABLE AppLink (App1 int, App2 int)

对于尽可能多的关系,这是无限可扩展的。

答案 3 :(得分:0)

应用程序实体与其自身有多对多的关系,因此您需要另一个表来存储该映射:

APP_Relationship (ApplicationId, RelatedApplicationId)

答案 4 :(得分:0)

LinkedApplication{ID, ApplicationId, LinkedApplicationId}

答案 5 :(得分:0)

您需要一个链接表,它基本上允许您在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