sql >> Database >  >> RDS >> Sqlserver

SQL Unieke beperking voor meerdere tabellen

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.



  1. Tips voor het repareren van SQL Server-indexfragmentatie

  2. 5 voordelen om van te genieten wanneer u uw database upgradet

  3. Oracle ORA-00979 - geen GROUP BY-expressie

  4. Verbinding maken met Oracle met behulp van Service Name in plaats van SID