在T-SQL中,是否有可能具有由组合键组成的关系表,该列由定义表类型的1列和定义参考表中的行的标识符组成在Table Type列中?T-SQL中的复合键和参照完整性
对于共享电子邮件地址例如:
三种不同的用户表(用户A,用户B,用户C)
一用户类型表(用户类型)
一个电子邮件表(EmailAddress的)
一个电子邮件用户关系表(EmailRelationship)
EmailRelationship表包含三列,EmailId,UserTypeId和UserId
为了保持参照完整性,我可以从每个用户表到EmailRelationship表(或其他方式?)有关系吗?
我已经尝试使EmailRelationship表中的所有三列变成主键,我试着只做UserTypeId和UserId主键。
CREATE TABLE [dbo].[UserType](
[Id] [int] IDENTITY(1,1) NOT NULL ,
[Type] [varchar](50) NOT NULL)
insert into [dbo].[UserType]
([Type])
values
('A'),('B'),('C')
CREATE TABLE [dbo].[UserA](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserTypeId] [int] NOT NULL,
[Name] [varchar](50) NOT NULL)
insert into [dbo].[UserA]
(UserTypeId,Name)
values
(1,'UserA')
CREATE TABLE [dbo].[UserB](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserTypeId] [int] NOT NULL,
[Name] [varchar](50) NOT NULL)
insert into [dbo].[UserB]
(UserTypeId,Name)
values
(2,'UserB')
CREATE TABLE [dbo].[UserC](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserTypeId] [int] NOT NULL,
[Name] [varchar](50) NOT NULL)
insert into [dbo].[UserC]
(UserTypeId,Name)
values
(3,'UserC')
CREATE TABLE [dbo].[Email](
[Id] [int] IDENTITY(1,1) NOT NULL,
[EmailAddress] [varchar](50) NOT NULL)
insert into [dbo].[email]
(EmailAddress)
values
('[email protected]')
CREATE TABLE [dbo].[EmailRelationship](
[EmailId] [int] NOT NULL,
[UserTypeId] [int] NOT NULL,
[UserId] [int] NOT NULL)
insert into [dbo].[EmailRelationship]
(EmailId, UserTypeId, UserId)
values
(1,1,1),(1,2,1),(1,3,1)
我明白,你几乎可以肯定地发布你的实际情况的一个小例子,但我不能真正看到你需要所有3个用户表,为什么不只是有单用户表? – GarethD
让我直说吧? [EmailRelationship]应该知道哪三个表是FK?更何况为什么你需要三个相同的表? – Paparazzi
这是理解_的简化示例。它不是用户所说的,而是SalesCompany,SalesCompanyRep,ParticipatingCompany,ParticipatingCompanyRep以及其他不符合“用户”类别的信息,但都可以收到信函。我的最终目标是建立一个系统,该系统会发邮件给在SalesCompany和SalesCompanyReps表中定义的所有实体,并最终扩大到发送信件到ParticipatingCompany和ParticipatingCompanyRep表(或员工或其他)中定义的所有的entites。 – RIanGillis