Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Contrainte SQL unique sur plusieurs tables

Ajoutez une 4ème table spécifiquement pour ces valeurs que vous voulez rendre uniques, puis liez ces clés de cette table dans les autres en utilisant une relation un à plusieurs. Par exemple, vous aurez la table unique avec un ID, AppName et ItemName pour constituer ses 3 Colonnes. Faites ensuite en sorte que ce tableau soit lié aux autres.

Pour savoir comment procéder, voici un bon exempleCréer une relation un à plusieurs à l'aide de SQL Server

MODIF : C'est ce que je ferais, mais compte tenu des besoins de votre serveur, vous pouvez modifier ce qui est nécessaire :

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

D'après ce que je peux dire, votre syntaxe est bonne, je l'ai simplement changée simplement parce que je la connais mieux, mais l'une ou l'autre devrait fonctionner.