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

1 ... 8 9 10 [ 11 ] 12 13 14 ... 152





Убедитесь, что в каждой таблице имеется первичный ключ. Первичный ключ необходимо назначить каждой таблице по двум причинам Во-первых, он однозначно идентифицирует каждую запись в таблице, а во-вторых, он используется для связывания таблиц. Если не назначить первичный ключ каждой таблице, в конце концов возникнут проблемы целостности данных и проблемы в некоторых типах запросов SQL к нескольким таблицам. Позже мы дадим несколько советов о том, как определить надлежащий первичный ключ. (Современные СУРБД, в частности Access 2000, просто не дадут определить таблицу без первичного ключа.- Прим. пер.)

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

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

Убедитесь в том, что поля в таблицах не дублируются. Одним из признаков плохо спроектированной таблицы является включение дублирующих полей из других таблиц. Возможно, добавить дублирующие поля в таблицу вас вынудило желание добавить справочную информацию или обрзначить таким образом многократные появления значения определенного типа. Такие дублирующие поля вызывают различные сложности при работе с данными и при попытке извлечь информацию из таблицы. Рассмотрим, как справиться с повторяющимися полями.

Устронение дублирующих полей

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

На рис. 2.7 представлен пример таблицы, содержащей повторяющиеся поля - якобы для справки .

В данном случае поля StaffLastName и StaffFirstName появляются в таблице Classes для того, чтобы при просмотре таблицы можно было видеть имя преподавателя данного класса. Однако эти поля излишни вследствие связи один-ко-многим, которая существует между таблицами Classes и Staff (один преподаватель может




Staff

lllllll

riifiiiilii

98014

James

lioii

Laura

98020

Albert

0ЛМтЛ*** fiHtlJif Ija Д.

98021




Ii i jritittewiJiiiriiitiiiiifiii-iiiii

Leverlirg

722 Moss Bay Blvd.

Callahan

Buchanan

Smith

901 Pine Avenue

13920 $£. 40th Street

30301 166th Ave. N.E.

Kirkland


Portland

Bellevue

>!И. ,1Ш>,М<М,>,уМГ.;1


4 I-

Seattle

1 - iiitiiKaTiiTiiim-[i4i>-ti-iiit-inbitti* .мям й ми ММ

98022

Janet

ieverling

722 Moss Bay Blvd.

Kirkland

98023 ! Aiaina

I Hallmark I Route 2. Box 203 В Woodinville WA

в

a

*!Л ;<l>w.<<.Wr<wwиwfr.№w.:w.;<;-

Classes

Эти поля не нужны

j::!:f:f:jips

**** r*lW*w:♦w S !Wt> **

1 1031

Aft History

1231 !

1030 2213 2005

Art History 1 Biological Рг1пф1е$ Chemistry

1231 1 1532 1 1515 i

1519

2001

Chemistry

1006

Drawing

1627

2907

Elementary Algebra

3445 1


98014

Leverling

98014 i Leverling

98021 (Smith

James James


98019


Callahan

Hallmark

98020 i Buchanan

98022 I Leverling

Laura

Aiaina

Albert

Janet


Рис. 2.7. Таблица с дублирующими полями

вести любое количество предметов, но каждый конкретный предмет может вести только один преподаватель). Связь моеду этими таблицами устанавливает поле StaffID, и само наличие этой связи позволяет одновременно просматривать данные из обеих таблиц в запросе SQL. Учитывая это, можно без опаски удалить поля StaffLastName и StaffFirstName из таблицы Classes, не вызвав каких-либо отрицательных воздействий. На рис. 2.8 представлена исправленная структура таблицы Classes.

Сохранение лишних полей в таблице автоматически вызывает значительные проблемы, связанные с противоречивостью данных. Необходимо гарантировать, что значения полей StaffLastName и StaffFirstName в таблице Classes всегда соответствуют их копиям в таблице Staff. Допустим, женщина-преподаватель выходит замуж и меняет свою фамилию на фамилию мужа. Необходимо быть уверенным не только в том, что соответствующие изменения в ее записи сделаны в таблице Staff, но также гарантировать, что изменены все записи с ее именем в таблице Classes. Конечно, это можно сделать (по крайней мере технически), но придется потрудиться больше, чем необходимо. Помимо этого, одна из главных предпосылок использования реляционной БД состоит в том, что все данные встречаются во всей базе данных только один



Staff

Nam-

98014

James

Leverting

722 Moss Bay Blvd.

Kirkland

98019

Laura

Ganahan

901 Pine Avenue

Portland

98020

Albert

Buchanan

13920 S.E. 40th Street

Bellevue

98021

Smith

30301-166th Ave. N.E.

Seattle

98022

Janet

Leveriing

722 Moss Bay Blvd.

Kirkiand

98023

Alaina

Haiimark

Route 2, Box 203 В

Woodinville

Classes

-

; С ass

: Classroom 0

. . .

1031

Art History

1231

96014

к

1030

Art History

1231

98014

2213

Biological Principles

1532

96021

*

2005

Chemistry

1515

96019

f

2001

Chemistry

1519

96233

Drawing

1627

96020

1

2907

Elementary Algebra

3445

96022

Рис. 2.8. Устранение дублирующих полей

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

Другой пример таблицы, содержащей дубликаты полей, представлен на рис. 2.9. Он показывает, как дубликаты полей ошибочно используются для обозначения того, что значение встречается несколько раз. В этом случае три поля Committee (Комитет) используются якобы для записи названий комитетов, в которых принимает участие сотрудник.

Employees

Р ?Т: Р Р Г С * Ь1 > ft

1 С f\rp.fTf\fip4x 1

Comn ;i!tee2

j Comm;ttie3

7004

Peacock

Samuel

Steering

<

7005

Kennedy

John

Y2K Conformance

Safety

7006

Thompson

Sarah

Safety

Y2K Conformance

Steenng

*

7007

СаПаПап

David

t * *

7006

Buchanan

Andrea

Y2K Conformance

к

7009

Smith

David

Steering

Safety

Y2K Conformance

7010

Patterson

Neil

7011

Viescas

Michael

Y2K Conformance

Steering

Safety

Рис. 2.9.

Таблица с дубликатами полей, используемых для обозначения того, что значение встречается несколько раз



1 ... 8 9 10 [ 11 ] 12 13 14 ... 152

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