Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Vincolo SQL Unique su più tabelle

Aggiungi una quarta tabella specifica per questi valori che vuoi essere univoco, quindi collega queste chiavi da questa tabella alle altre usando una relazione uno a molti. Ad esempio avrai la tabella univoca con un ID, AppName e ItemName per creare i suoi 3 colonne. Quindi fai in modo che questa tabella sia collegata alle altre.

Per come farlo, ecco un buon esempioCrea una relazione uno a molti usando SQL Server

MODIFICA: Questo è quello che farei, ma considerando le esigenze del tuo server puoi cambiare ciò che è necessario:

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

Da quello che posso dire che la tua sintassi va bene, l'ho semplicemente cambiata in questo modo semplicemente perché ho più familiarità con essa, ma entrambi dovrebbero funzionare.