Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Ograniczenie unikatowe SQL w wielu tabelach

Dodaj czwartą tabelę specjalnie dla tych wartości, które chcesz, aby były unikalne, a następnie połącz te klucze z tej tabeli z innymi, używając relacji jeden do wielu. Na przykład będziesz mieć unikalną tabelę z identyfikatorem, nazwą aplikacji i nazwą elementu, aby uzupełnić jej 3 kolumny. Następnie umieść tę tabelę jako link do innych.

Oto dobry przykład, jak to zrobić. Utwórz relację jeden do wielu za pomocą SQL Server

EDYTUJ: Oto, co bym zrobił, ale biorąc pod uwagę potrzeby serwera, możesz zmienić to, co jest potrzebne:

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

Z tego, co mogę powiedzieć, twoja składnia jest w porządku, po prostu zmieniłem ją w ten sposób, ponieważ jestem z nią bardziej zaznajomiony, ale albo powinno działać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Atomic UPSERT w SQL Server 2005

  2. Jak naprawić „Schemat partycji ‚…’ nie ma żadnej następnej używanej grupy plików” w SQL Server

  3. Co jest szybsze COALESCE CZY ISNULL?

  4. 2 sposoby na zwrócenie nazwy serwera w SQL Server (T-SQL)

  5. Replikacja SQL Server wymaga rzeczywistej nazwy serwera, aby nawiązać połączenie z serwerem