Программирование >>  Исключение дубликатов строк 

1 ... 10 11 12 [ 13 ] 14 15 16 ... 152


Pilots

PilotlD

HireDate

Position

P:!otAfeaCod6

25100

John

Leveriing

19947-11

Captain

555-3982

25101

David

Callahan

1994-05-01

Captain

555-6657

25102

David

Smith

1994.09-i.i

RrstOfficer

555-1992

25103

Kathryn

Patterson

1994-07-11

Navigator

555-6632

25104

l\4ichaei

Hernandez

1994-05-01

Navigator

555-9901

25105

Kendra

Bonnrcksen

1994-09-11

Captain

555-1106

Рис. 2.12. Является ли PilotID надежным первичным ключом?



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

Может ли значение этого поля когда-либо измениться? Значение поля первичного ключа должно оставаться статичным, т. е. никогда не следует изменять значение первичного ключа, если действительно нет убедительной причины для этого. Когда значение поля подвергается произвольным изменениям, полю трудно оставаться в соответствии с другими пунктами этого контрольного списка.

Как уже говорилось, поле должно удовлетворять всем требованиям данного контрольного списка, прежде чем его можно будет использовать как первичный ключ. На рис. 2.12 PilotID служит первичным ключом таблицы Pilots. Но вопрос в том, удовлетворяет ли PilotID всем пунктам контрольного списка? Если да, то первичный ключ надежен. Но если нет, то необходимо либо изменить его, чтобы он соответствовал всем пунктам контрольного списка, либо выбрать в качестве первичного ключа другое поле.

В действительности поле PilotID является надежным первичным ключом, потому что оно соответствует всем пунктам контрольного списка. Но что произойдет, если нет поля, которое можно выбрать в качестве первичного ключа? Рассмотрим, например, таблицу Employees на рис. 2.13. Имеется ли в этой таблице поле, которое может служить первичным ключом?

Совершенно ясно, что в этой таблице такое поле отсутствует. За исключением EmpPhone, каждое поле содержит повторяющиеся значения. EmpZip, EmpAreaCode и EmpPhone содержат неизвестные значения. Поскольку значение каждого поля в этой таблице может меняться произвольным образом, то очевидно, что отсутствует поле, которое можно использовать в качестве первичного ключа. И что же теперь делать? - Создать искусственный первичный ключ.

Это произвольное поле, которое определяется и добавляется к таблице с единственной целью использовать его в качестве первичного ключа. Преимущество добавления произвольного поля состоит в том, что оно гарантированно удовлетворяет



Employees

JlinfJpZipflf;

;:€трАгеШ31-

niPhdri--

Peacock

Samuel

Chico

95926

1998-12-31

Kennedy

John

Portlffiid

97206

555-2621

1998-05-01

Thompson

Mk:ha6l

Recnond

98052

555-2626

1998-09-11

Callahan

David

Salem

1998-12-27

8uchanan

Andrea

Medfofd

97501

555*2641

1998-05-01

Smith

Michael

Fremont

94538

555-2646

1998-09-11

Peacodc

Meil

San Diego

92199

555-2541

1998-05-01

Kennedy

John

b. . ..... .,.........,

96052

555-2511

1998-09-11

Рис. 2.13. Имеется ли в этой таблице первичный ключ?

Employees

lIMHlli

98001

Реаак*

Samuel

Chico

95926

98002

Kennedy

John

Portland

97208

98003

Thompson

Michael

Redmond

98052

96004

Callahan

David

Salem

96005

6ud)anan

Andrea

Medford

97501

98006

Smlfti

Michael

Fremont

94538

* *

98007

Peacock

Neil

SanDiego

92199

**

98008

Kennedy

John

Redmond

98052

* * * 1

Рис. 2.14. Таблица Employees с новым искусственным первичным ключом

всем пунктам контрольного списка. Раз это поле добавлено к таблице, определите его как первичный ключ - и все в порядке! На рис. 2.14 представлена таблица Employees с новым искусственным первичным ключом, имя которого EmployeelD. На этот момент сделано все для упрочения и тонкой настройки структур ваших

между

ми правильные.

Установка и исправление связей

Между двумя таблицами существует связь, если записям в первой таблице некоторым образом сопоставлены записи второй таблицы. Сами связи могут быть спроектированы по одному из трех типов: один-к-одному, один-ко-многим и многие-ко-многим. Каждый тип связей устанавливается специальным способом. Кратко повторим это.



Эта линия показывает, что одной записи в Emp[oyee Confldentlal стовится в соответствие только одно запись в Employees.

Empfoyees


EmployeeConfidentidl

Employee ID

H EmployeelD


Эта линия показывает, что одной записи в Employees ставится в соответствие только одна запись в EmployeeConfidentlal.

Рис. 2.15. Изображение на диаграмме связи один-к-одному

<И**Г* )* Ч i-t.XWN.iiJ>*i. -;-1 А ш*lf *-4



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

Связь один-ко-многим устанавливается, если берется первичный ключ таблицы на стороне один и вставляется в таблицу на стороне многие , где он становится внешним ключом. На рис. 2.16 представлена диаграмма с этим типом связи.


Внимание! Символы диаграммы, представленные в этом разделе, являются частью метода, изложенного в книге Хернандеса Database Design for Mere Mortals.

Эта линия показывает, что одной записи в Instruments ставится в соответствие только 04>/а запись в Students

students

Instruments

Student ID

Instrument ID Student rD


Этот вороний след указывает, что одной записи в таблице Students соответствует несколько записей в таблице Instruments.

Рис. 2.16. Представление в виде диаграммы связи один-ко-многим

РК FK



1 ... 10 11 12 [ 13 ] 14 15 16 ... 152

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика