#sql #sql-server #sql-server-2012
Вопрос:
У меня есть таблица, в которой я храню разные документы из разных источников следующим образом
CREATE TABLE [dbo].[Document](
[DocumentId] [int] IDENTITY(1,1) NOT NULL,
[EntityId] [int] NOT NULL,
[DocumentGuid] [uniqueidentifier] NOT NULL,
[DocumentTypeCdId] [int] NOT NULL,
[DocumentName] [nvarchar](500) NOT NULL,
[DocumentType] [nvarchar](500) NOT NULL,
[DocumentData] [nvarchar](max) NOT NULL,
[IsSuppressed] [bit] NULL,
[CreatedBy] [nvarchar](200) NULL,
[CreatedDt] [datetime] NULL,
[UpdatedBy] [nvarchar](200) NULL,
[UpdatedDt] [datetime] NULL,
CONSTRAINT [PK_Document] PRIMARY KEY CLUSTERED
(
[DocumentId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[Document] WITH CHECK ADD CONSTRAINT [FK_Document_DocumentTypeCd] FOREIGN KEY([DocumentTypeCdId])
REFERENCES [dbo].[DocumentTypeCd] ([DocumentTypeCdId])
GO
ALTER TABLE [dbo].[Document] CHECK CONSTRAINT [FK_Document_DocumentTypeCd]
GO
EntityId будет из разных исходных таблиц, поэтому я могу добавить этот столбец, чтобы он был FK всех этих исходных таблиц. В настоящее время у меня есть почти 10 исходных таблиц. Если нет, то каков лучший подход к решению этого сценария
Комментарии:
1. Столбец не может быть внешним ключом разных столбцов из нескольких таблиц, это просто не сработает. Как бы он узнал, с какой таблицей нужно проверить ее действительность?
2. У меня есть главная таблица DocumentTypeCd, в которой указано, к чему она относится
3. Так в чем же тогда проблема?
4. Я просто хочу знать, хорошая ли это практика
5. Различные источники-это ваша главная проблема.
Ответ №1:
У вас проблема с дизайном вашей базы данных. В таком случае вам нужна родительская таблица предков, в которой хранятся ключи всех типов документов, а затем несколько дочерних таблиц, каждая из которых предназначена для определенного типа документа.
Это называется наследованием, и дочерние элементы не должны иметь одно и то же значение ключа (таблица дочерних элементов с идентификаторами исключений…)