Вопрос схемы базы данных - PullRequest
2 голосов
/ 17 марта 2011

Если я использую первичный ключ таблицы в качестве первичного ключа другой таблицы, это все еще внешний ключ?

, например

Две таблицы альбомов и специальные предложения

AlbumId является первичным ключом в обоих

Как мне представить это отношение с помощью записи внешнего ключа первичного ключа?

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Да, это все еще первичный ключ.Обычно это называется отношение один к одному .

Вы можете сделать что-то вроде:

create table albums (
    album_id integer primary key,
    -- other fields...
);

create table special_offers (
    album_id integer primary key references albums(album_id),
    -- other fields...
);
0 голосов
/ 17 марта 2011

Пабло Санта Круз прав - да, тебе разрешено это делать.Однако, с философской точки зрения, это имеет смысл только в том случае, если действительно существуют отношения один-к-одному - все альбомы имеют одно-единственное специальное предложение, а все специальные предложения имеют один-единственный альбом.домен, это не так - у некоторых альбомов нет специальных предложений, у некоторых - 1, у некоторых - много.

Если это действительно так, bw_üezi прав - создайте отношения один ко многим.

create table albums (
    album_id integer primary key,
    -- other fields...
);

create table special_offers (
    special_offer_id integer primary key,
    album_id integer foreign key references albums(album_id),
    -- other fields...
);
0 голосов
/ 17 марта 2011

если, например, у вас есть несколько специальных предложений для одного альбома, AlbumId больше не является уникальным в таблице специальных предложенийЯ бы подумал о добавлении SpecialOfferId и разработке отношения один ко многим.

...