Этот вопрос в значительной степени подобен этому, но для SQL Server 2005:
У меня есть 2 таблицы в моей базе данных:
--'#' denotes the primary key
[Libraries]
#ID #Application Name
1 MyApp Title 1
2 MyApp Title 2
[Content]
#ID Application LibraryID Content
10 MyApp 1 xxx
11 MyApp 1 yyy
(база данных, очевидно, намного более сложна и имеет, этот двойной ключ имеет смысл),
Каждая библиотека определяется ее уникальным идентификатором и Именем приложения. Я пытаюсь удостовериться, что каждое содержание правильно ссылается на существующую библиотеку.
При создании ограничения (использующий Мастер) как
Primary key table Foreign key table
[Libraries] [Content]
ID ---> LibraryID
Application ---> Application
У меня есть следующая ошибка:
Столбцы в таблице 'Libraries' не соответствуют существующему первичному ключу или ограничению UNIQUE
У Вас есть какая-либо идея того, что продолжается? и если это возможно во всем SQL Server использования? (Я не могу изменить таблицу [Library] вообще),
Большое спасибо за Вашу справку!
Конечно, можно создать отношение внешнего ключа к составной (более одного столбца) первичный ключ. Вы не показали нам утверждение, которое вы используете, чтобы попытаться создать эти отношения - оно должно быть примерно таким:
ALTER TABLE dbo.Content
ADD CONSTRAINT FK_Content_Libraries
FOREIGN KEY(LibraryID, Application)
REFERENCES dbo.Libraries(ID, Application)
Это то, что вы используете ?? Если (ID, Application)
действительно является первичным ключом в dbo.Libraries
, этот оператор определенно должен работать.
Люк: просто для проверки - можете ли вы запустить этот оператор в своей базе данных и сообщить, какой будет результат ??
SELECT
tc.TABLE_NAME,
tc.CONSTRAINT_NAME,
ccu.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE
tc.TABLE_NAME IN ('Libraries', 'Content')
Таблица Content
, вероятно, будет иметь несколько повторяющихся значений Application
, которые не могут быть сопоставлены с библиотеками
. Можно ли удалить столбец Приложение
из индекса первичного ключа Библиотеки
и добавить его вместо него в качестве индекса уникального ключа?