Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Primary Key & Foreign Key


Автор: Berliner 9.3.2006, 12:33
Встал вопрос о работе с базой. Хотелось бы узнать в чем разница между
работой с Primary Key и Foreign Key. Primary вроде как ключ уникальный для связи с другими таблицами? А Foreign Key зачем тогда? Пояните пожалуста.

Автор: batigoal 9.3.2006, 12:53
Primary Key - уникальное значение в твоей таблице, по которому ты сможешь однозначно идентифицировать запись.
Foreign Key - значение, с помощью которого ты сможешь сослаться на запись другой таблицы (это значение не обязано быть уникальным).
Добавлено @ 12:53
Часто Foreign Key одной таблицы ссылается на Primary Key другой.

Автор: Berliner 9.3.2006, 14:38
Насколько я понял под ForeignKey понимается взаимосвязь между таблицами например у себя Sybase ASA я клацаю по ForeignKey(ht1 например) и две колонки PrimaryKey s_name и ForeignKey s_name(если я че-то не перепутал). Как это понимать - получается ForeignKey єто взаимосвязь? Внутри ForignKey нужно прописывать поля таблиц?

Автор: Akina 9.3.2006, 14:49
Внешний ключ - это просто указание на поле, часть поля или комбинацию (частей) нескольких полей, которые дают некое содержимое. Это содержимое используется для связи с другой таблицей, где также из поля или нескольких полей составляется точно того же содержания значение. Связанными являются те записи этих таблиц, у которых эти значения совпадают.

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

Автор: Vit 9.3.2006, 16:15
Пример:

Таблица 1 - ставки
ID Должность
------------------
1 Лаборант
2 Секретарь
3 Инженер


Таблица 2 - Сотрудники
ID Ставка ФИО
1 1 Иванов
2 1 Петров
3 2 Сидоров
4 3 Федоров
4 3 Смирнов


Поля ID однозначно определяют запись - и по ним надо ставить первичный ключ
А вот поле ставка реально соединяет 2 таблицы, и Foreign Key Надо ставить на
ставки.ID+Сотрудники.Ставка



Автор: Berliner 13.3.2006, 18:22
Спасиб за пример. Подскажите пожалуста а что такое ссылки(References)

и какое основное отличие ссылки от внешнего ключа?

Создавать таблицы примерно нужно так
Код
create table wages (
  id  numeric not null pimary key refernces workers(salary ),  -- тут делаю ссылку на salary из таблицы workers
  position varchar(30) not null
)


Код
create table workers (
  id numeric not null,
  salary  money not null,  -- вот тут не знаю правильно ли тут ничего не надо ставить? или надо увязать?
  Name varchar(50) not null  
)

Автор: chief39 13.3.2006, 18:28
Цитата(Berliner @ 13.3.2006, 18:22 Найти цитируемый пост)
и какое основное отличие ссылки от внешнего ключа?

Это одно и то же smile

Код

create table wages(
   id numeric not null pimary key , 
   position varchar(30) not null
)

create table workers(
   id numeric not null,
   salary numeric not null, 
   Name varchar(50) not null,
   foreign key salary refernces wages(id )
) 


Ссылается воркерс на зарплату. Причём свои внешним ключом на праймари ки зарплаты.
Добавлено @ 18:29
Ты почему Дэйта и прочих дядек не читаешь, а? smile

Автор: Berliner 13.3.2006, 18:39
ок спасиб


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)