Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 8 Логическое проектирование.doc
Скачиваний:
27
Добавлен:
19.11.2019
Размер:
524.8 Кб
Скачать

1. Анализ имен сущностей и их первичных ключей

Может оказаться полезным предварительно проанализировать имена сущностей, присутствующих в локальных моделях данных, — эти сведения можно найти в сло­варе данных. Проблемы имеют место в следующих случаях:

  • если две или более сущностей имеют одно и то же имя, но на самом деле отличаются одна от другой;

  • если две или более сущностей идентичны, но имеют различные имена.

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

2. Анализ имен связей

Выполняемые действия аналогичны описанным на предыдущем этапе.

3. Слияние общих сущностей из отдельных локальных моделей

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

  • слияние сущностей с одинаковыми именами и первичными ключами;

  • слияние сущностей с одинаковыми именами, но с различными первичны­ми ключами;

  • слияние сущностей с различными именами, имеющих одинаковые или различные первичные ключи.

Слияние сущностей с одинаковыми именами и первичными ключами. Как правило, сущности с одним и тем же первичным ключом представляют один и тот же объект ре­ального мира и, следовательно, должны быть слиты. Объединенная сущность будет включать все атрибуты сливаемых сущностей, за исключением дублирующихся. Так, в листинге 8.1 перечислены атрибуты, связанные с двумя сущностями, носящими имя Staff, которые определены в двух различных представлениях, названных View1 и View2. В обоих случаях первичным ключом является атрибут Staff_No. Слияние этих сущно­стей осуществляется путем объединения их атрибутов, поэтому в сводной сущности Staff будут присутствовать все атрибуты исходных сущностей. Отметим, что в данном случае имеет место конфликт, связанный со способом представления в каждой из ис­ходных сущностей имени работника. В подобной ситуации, прежде чем выбрать' необ­ходимый способ представления конфликтных данных, следует (по возможности) про­консультироваться с пользователями каждого из исходных представлений. Обратите внимание, что в нашем примере было выбрано развернутое представление атрибута Name, т.е. разделение его в сводной сущности на атрибуты FName и LName.

Листинг 8.1. Слияние сущностей Staff из представлении View1 и View2

(Представление View1)

Staff (Staff No, Name, Position, Sex, Salary, Branch_No)

Primary Key Staff_No

Foreign Key Branch No references Branch(Branch No)

{Представление View2)

Staff (Staff_No, FName, LMame, Address, Branch_No)

Primary Key Staff_No

Foreign Key Branch No references Branch (Branch No)

(Глобальное представление)

Staff (Staff_No, FName, LName, Address, Position, Sex, Salary, Branch_No)

Primary Key Staff_No

Foreign'Key Branch_No

references Branch(Branch_No)

Слияние сущностей с одинаковыми именами, но с различными первичными клю­чами. В некоторых ситуациях могут быть обнаружены две сущности с одним и тем же именем, те которых используются различные первичные ключи, однако имеются одинаковые потенциальные ключи. В этом случае сущности сливаются аналогично тому, как это было сделано в предыдущем варианте. Дополнительно потребуется вы­брать в результирующей сущности первичный ключ, объявив все остальные ключи альтернативными. В листинге 8.2 перечислены атрибуты двух сущностей Staff, оп­ределенных в двух различных представлениях под именами View1 и View2. Первич­ным ключом сущности Staff из представления Viewl является атрибут Name, а пер- '• вичным ключом сущности Staff из представления View2 — атрибут Staff No. Однако в сущности Staff из представления View1 определен альтернативный ключ Staff No, a в сущности Staff из представления View2 — альтернативный ключ (FName, LName). Хотя первичные ключи в каждой из исходных сущностей различны, первичный ключ сущности Staff из представления View1 является альтернативным ключом сущ­ности Staff из представления View2, и наоборот. Сущность, полученная в результате слияния двух исходных сущностей, аналогична результирующей сущности, пред­ставленной в листинге 8.1, однако в ней следует дополнительно определить альтер­нативный ключ (FName, LName).

Листинг 8.2. Слияние эквивалентных сущностей с различными первичными ключами

{Представление View1)

Staff (Staff No, Name, Position, Sex, Salary, Branch_No)

Primary Key Name

Alternate Key Staff_No

Foreign Key Branch_No references Branch(Branch_No)

[Представление View2)

Staff (Staff_No, FName, LName, Address, Branch_No)

Primary Key Staff_No

Alternate Key FName, LName

Foreign Key Branch_No references Branch (BranchJto)

(Глобальное представление)

Staff (Staff_No, FName, LName, Address, Position, Sex, Salary, Branch_No)

Priaary Key Staff_No .

Alternate Key FName, LName

Foreign Key Branch_No references Branch (Branch_No)

Слияние сущностей с различными именами, имеющих одинаковые или различные первичные ключи. В некоторых случаях можно обнаружить сущности, которые име­ют различные имена, но предназначены для одной и той же Цели. Подобные эквива­лентные сущности можно распознать по их именам, которые будут указывать на их сходное назначение, по их содержанию и по их первичным ключам. Кроме того, их можно распознать по участию в определенных связях. Типичным примером подобной ситуации является наличие в моделях сущностей с названиями Staff (Персонал) и Employee (Работник), которые, по сути, являются эквивалентными и должны быть слиты в единую сущность