Voeg een vierde tabel toe specifiek voor deze waarden die u uniek wilt maken en koppel deze sleutels uit deze tabel vervolgens aan de andere met behulp van een één-op-veel-relatie. U krijgt bijvoorbeeld de unieke tabel met een ID, AppName en ItemName om de 3 te vormen kolommen. Laat deze tabel dan linken naar de andere.
Hoe u dit doet, volgt hier een goed voorbeeldCreëer een een-op-veel-relatie met SQL Server
BEWERKEN: Dit is wat ik zou doen, maar gezien je serverbehoeften kun je veranderen wat nodig is:
CREATE TABLE AllItems(
[id] [int] IDENTITY(1,1) NOT NULL,
[itemType] [int] NOT NULL,
[AppName] [nvarchar](20) NOT NULL,
[ItemName] [nvarchar](32) NOT NULL,
CONSTRAINT [pk_AllItems] PRIMARY KEY CLUSTERED ( [id] ASC )
) ON [PRIMARY]
CREATE TABLE Analog(
[itemId] [int] NOT NULL,
[Value] [float] NOT NULL
)
CREATE TABLE Discrete(
[itemId] [int] NOT NULL,
[Value] [bit] NOT NULL
)
CREATE TABLE Message(
[itemId] [bigint] NOT NULL,
[Value] [nvarchar](256) NOT NULL
)
ALTER TABLE [Analog] WITH CHECK
ADD CONSTRAINT [FK_Analog_AllItems] FOREIGN KEY([itemId])
REFERENCES [AllItems] ([id])
GO
ALTER TABLE [Analog] CHECK CONSTRAINT [FK_Analog_AllItems]
GO
ALTER TABLE [Discrete] WITH CHECK
ADD CONSTRAINT [FK_Discrete_AllItems] FOREIGN KEY([itemId])
REFERENCES [AllItems] ([id])
GO
ALTER TABLE [Discrete] CHECK CONSTRAINT [FK_Discrete_AllItems]
GO
ALTER TABLE [Message] WITH CHECK
ADD CONSTRAINT [FK_Message_AllItems] FOREIGN KEY([itemId])
REFERENCES [AllItems] ([id])
GO
ALTER TABLE [Message] CHECK CONSTRAINT [FK_Message_AllItems]
GO
Voor zover ik kan zien dat je syntaxis in orde is, heb ik het gewoon op deze manier veranderd, simpelweg omdat ik er meer bekend mee ben, maar beide zouden moeten werken.