Thêm bảng thứ 4 cụ thể cho các giá trị này mà bạn muốn là duy nhất, sau đó liên kết các khóa này từ bảng này với các khóa khác bằng cách sử dụng mối quan hệ một với nhiều. Ví dụ:bạn sẽ có bảng duy nhất với ID, AppName và ItemName để tạo thành 3 cột. Sau đó, hãy liên kết bảng này với những bảng khác.
Để biết cách thực hiện điều này, đây là một ví dụ điển hình Tạo mối quan hệ một đến nhiều bằng SQL Server
CHỈNH SỬA: Đây là những gì tôi sẽ làm nhưng xem xét nhu cầu máy chủ của bạn, bạn có thể thay đổi những gì cần thiết:
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
Từ những gì tôi có thể cho biết cú pháp của bạn là ổn, tôi chỉ đơn giản là thay đổi nó theo cách này đơn giản vì tôi quen thuộc hơn với nó nhưng cũng nên hoạt động.