2013-10-27 4 views
1

У меня есть две таблицы пользователей & Магазинысоздания таблицы со ссылкой на не столбец первичного ключа

стол

Пользователи первичный ключ представляет собой комбинацию адреса & номер телефона (пользователи зарегистрироваться через веб-страницу, и я не хочу, один и тот же пользователь регистрируется дважды), столбец userId является серийным, но не первичным ключом

В таблице «Столбец» столбец ownerID является идентификатором пользователя из таблицы пользователей, но поскольку это не первичный ключ, ссылка не может быть установлена ​​(хотя он серийный)

как я могу достичь этого результата?

+0

Я не уверен, чего вы пытаетесь достичь, но ** сочетание адреса и номера телефона в качестве первичного ключа ** - это не очень хорошая идея! –

+0

@RahulTripathi почему? –

+0

Если у вас есть UserId в вашей таблице, я бы предложил вам сделать это как первичный ключ, поскольку это было бы лучше! –

ответ

2

Ссылка на колонку не обязательно должна быть первичным ключом.

Внешний ключ может ссылаться на столбцы, которые либо являются первичным ключом ИЛИ уникальным ограничением.

Это может быть сделано следующим образом:

CREATE TABLE Users(
    address varchar(100), 
    phone_number varchar(20), 
    userid serial, 
    constraint pk primary key (address, phone_number), 
    constraint userid_unq unique (userid) 
); 

create table Stores(
    storeid int primary key, 
    ownerID integer, 
    constraint b_fk foreign key (ownerID) 
    references Users(userid) 
); 
1

Вы должны сделать идентификатор пользователя первичный ключ, так что вы можете ссылаться на него легко в внешних ключей. Чтобы устранить дублирование телефона и адреса, вы можете определить уникальное ограничение или уникальный индекс для этих столбцов.

Смежные вопросы