sql - таблицы - что такое первичный ключ primary key)?




Внешний ключ, ссылающийся на первичный ключ из 2 столбцов в SQL Server (4)

Этот вопрос очень похож на этот , но для 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

У меня есть следующая ошибка:

Столбцы в таблице «Библиотеки» не соответствуют существующему первичному ключу или ограничению UNIQUE.

У вас есть представление о том, что происходит? и возможно ли вообще использовать SQL Server? (Я не могу изменить таблицу [Library] вообще)

Большое спасибо за вашу помощь!


Ключ «порядок столбца должен быть одинаковым»

Пример:

create Table A (
    A_ID char(3) primary key,
    A_name char(10) primary key,
    A_desc desc char(50)
)

create Table B (
    B_ID char(3) primary key,
    B_A_ID char(3),
    B_A_Name char(10),
    constraint [Fk_B_01] foreign key (B_A_ID,B_A_Name) references A(A_ID,A_Name)
)

порядок столбцов в таблице A должен быть -> A_ID затем A_Name ; определение внешнего ключа должно следовать тому же порядку.


Конечно, можно создать отношение внешнего ключа к составному (более одного столбца) первичному ключу. Вы не показали нам заявление, которое вы используете, чтобы попытаться создать эти отношения - это должно быть что-то вроде:

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 которые нельзя сопоставить с Libraries . Можно ли удалить столбец « Application из индекса первичного ключа Libraries и добавить его в качестве индекса уникального ключа?


У меня была такая же проблема, и я думаю, что у меня есть решение.

Если ваше поле « Application в таблице Library имеет внешний ключ, который ссылается на поле в другой таблице (названное « Application я бы поставил), то ваше поле « Application в таблице Library также должно иметь внешний ключ для таблицы « Application .

После этого вы можете сделать свой составной внешний ключ.

Извините за мой плохой английский, и извините, если я ошибаюсь.







foreign-key-relationship