在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