Проектирование РБД "Санатория" с помощью инструментария AllFusion ERwin Data Modeler

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

?а дочерней сущности, то этот вид связи не проявляется ни в одной идентифицирующей зависимости. В этом случае и ОТДЕЛ, и СОТРУДНИК рассматриваются как независимые сущности.

При проектировании БД Санатория определены следующие связи между сущностями:

  • Отделение состоит из секторов (один-ко-многим);
  • Отделение обслуживает клиентов (многие-ко-многим);
  • Сектор состоит из рабочих мест (один-ко-многим);
  • Рабочее место предоставляется сотруднику (один-ко-многим):
  • Функции выполняется на рабочем месте (один-ко-многим);
  • Автотранспорт принадлежит отделению (один-ко-многим);
  • Клиент имеет путевку (один-ко-многим);
  • Клиент работает на предприятии (один-ко-многим);
  • Жил.комплекс предоставляется клиенту (один-ко-многим);
  • Предприятие-отправитель предоставляет путевки (один-ко-многим);

 

Рис.1. Логический уровень проектирования БД

 

7. Переход на физический уровень. Процесс преобразования связи многие-ко-многим:

 

При переходе на физический уровень особого внимания заслуживают такие типы связей как “многие-ко-многим” и супертипа с подтипами.

Стандарт EDEF1X допускает присутствие в модели обоих типов связей. Однако без их разрешения физическая база данных будет далека от оптимальной. ERwin предоставляет возможность разрешения этих связей.

Стандартным разрешением связи “многие-ко-многим” является механизм, показанный на рис. 3.

Рис. 2. Разрешение связи "многие-ко-многим"

 

На логическом уровне проектирования БД существовала связь многие-ко-многим между сущностями Отделение и Клиент. В результате перехода на физический уровень образовалась дополнительная сущность с соответствующей областью первичных ключей:

 

Рис.3 Переход на физический уровень

8. Скрипт для создания БД в Access:

 

Starting Access Basic DAO Session...

 

Dim ERwinWorkspace As Workspace

Dim ERwinDatabase As Database

Dim ERwinTableDef As TableDef

Dim ERwinQueryDef As QueryDef

Dim ERwinIndex As Index

Dim ERwinField As Field

Dim ERwinRelation As Relation

 

Set ERwinWorkspace = DBEngine.WorkSpaces(0)

 

Set ERwinDatabase = ERwinWorkspace.OpenDatabase(sERwinDatabase)

 

CREATE TABLE "Client"

Set ERwinTableDef = ERwinDatabase.CreateTableDef("Client")

Set ERwinField = ERwinTableDef.CreateField("ID client", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("ID enterprise", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Number of flat", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Surname", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Name", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Lastname", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Address", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Insurance policy", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Birthday", DB_DATETIME)

ERwinTableDef.Fields.Append ERwinField

ERwinDatabase.TableDefs.Append ERwinTableDef

 

CREATE INDEX "PrimaryKey"

 

Set ERwinTableDef = ERwinDatabase.TableDefs("Client")

Set ERwinIndex = ERwinTableDef.CreateIndex("PrimaryKey")

Set ERwinField = ERwinIndex.CreateField("ID client")

ERwinIndex.Fields.Append ERwinField

Set ERwinField = ERwinIndex.CreateField("ID enterprise")

ERwinIndex.Fields.Append ERwinField

Set ERwinField = ERwinIndex.CreateField("Number of flat")

ERwinIndex.Fields.Append ERwinField

ERwinIndex.Primary = True

ERwinTableDef.Indexes.Append ERwinIndex

 

CREATE TABLE "Department"

Set ERwinTableDef = ERwinDatabase.CreateTableDef("Department")

Set ERwinField = ERwinTableDef.CreateField("ID department", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Department name", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Legal address", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

ERwinDatabase.TableDefs.Append ERwinTableDef

 

CREATE INDEX "PrimaryKey"

 

Set ERwinTableDef = ERwinDatabase.TableDefs("Department")

Set ERwinIndex = ERwinTableDef.CreateIndex("PrimaryKey")

Set ERwinField = ERwinIndex.CreateField("ID department")

ERwinIndex.Fields.Append ERwinField

ERwinIndex.Primary = True

ERwinTableDef.Indexes.Append ERwinIndex

 

CREATE TABLE "Department_Client"

Set ERwinTableDef = ERwinDat base.CreateTableDef("Department_Client")

Set ERwinField = ERwinTableDef.CreateField("ID department", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("ID client", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("ID enterprise", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Number of flat", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

ERwinDatabase.TableDefs.Append ERwinTableDef

 

CREATE INDEX "PrimaryKey"

 

Set ERwinTableDef = ERwinDatabase.TableDefs("Department_Client")

Set ERwinIndex = ERwinTableDef.CreateIndex("PrimaryKey")

Set ERwinField = ERwinIndex.CreateField("ID department")

ERwinIndex.Fields.Append ERwinField

Set ERwinField = ERwinIndex.CreateField("ID client")

ERwinIndex.Fields.Append ERwinField

Set ERwinField = ERwinIndex.CreateField("ID enterprise")

ERwinIndex.Fields.Append ERwinField

Set ERwinField = ERwinIndex.CreateField("Number of flat")

ERwinIndex.Fields.Append ERwinField

ERwinIndex.Primary = True

ERwinTableDef.Indexes.Append ERwinIndex

 

CREATE TABLE "Enterprise-sender"

Set ERwinTableDef = ERwinDatabase.CreateTableDef("Enterprise-sender")

Set ERwinField = ERwinTableDef.CreateField("ID enterprise", DB_INTEGER)

ERwinField.Required = True

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Name", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Legal address", DB_TEXT, 18)

ERwinTableDef.Fields.Append ERwinField

Set ERwinField = ERwinTableDef.CreateField("Number contract", DB_INTEGER)

ERwinTableDef.Fields.Append ERwinField

ERwinDatabase.TableDefs.Append ERwinTableDef

 

CREATE INDEX "