Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба 1.docx
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
186.1 Кб
Скачать

Модель «сущность-связь»

Модель Сущность-Связь (ER-модель) (англ. entity-relationship model или entity-relationship diagram) — это модель данных, позволяющая описывать концептуальные схемы. Она предоставляет графическую нотацию, основанную на блоках и соединяющих их линиях, с помощью которых можно описывать объекты и отношения между ними какой-либо другой модели данных. В этом смысле ER-модель является метамоделью данных, то есть средством описания моделей данных. ER-модель удобна при прототипировании (проектировании) информационных систем, баз данных, архитектур компьютерных приложений, и других систем (далее, моделей). С её помощью можно выделить ключевые сущности, присутствующие в модели, и обозначить отношения, которые могут устанавливаться между этими сущностями. Важно отметить, что сами отношения также являются сущностями (выделяются в отдельные графические блоки), что позволяет устанавливать отношения на множестве самих отношений. ER-модель является одной из самых простых визуальных моделей данных (графических нотаций). Она позволяет обозначить структуру «крупными мазками», в общих чертах. Это общее описание структуры называется ER-диаграммой или онтологией выбранной предметной области (area of interest). На этапе перехода к реализации данной ER-диаграммы в виде реальной информационной системы или программы, происходит отображение ER-модели в более детальную модель данных реляционной (объектной, сетевой, логической, или др.) базы данных, которая называется физической моделью данных по отношению к исходной ER-диаграмме.

Индивидуальное задание

Научиться проектировать базы данных, эффективно создавать таблицы и диаграммы, основываясь на этих таблиц. Познакомиться с языком запросов Transact-SQL, освоить его базовые возможности и попробовать применить их на практике для работы с данными.

Проектирование базы данных

Создаем базу данных и переходим в раздел с нашей новой БД, далее правой кнопкой мыши выбираем вкладку “Таблицы”. Создаем три таблицы, каждая из которых будет отвечать за свою область данных. В каждой таблице определяются первичные ключи, уникальные для каждой записи, определяем для каждого столбца, могут ли в нем присутствовать значения NULL.

Создание диаграммы

На основе созданных таблиц создадим диаграмму базы данных и проведем необходимые связи между таблицами. Создадим связь между первичным ключом ID таблицы “Книги” к [Название книги] таблицы “Движение”, то же самое проделываем с таблицами “Движение” и “Читатель”, где соединим ID и ФИО Читателя.

После создания и сохранения диаграмм, создадим новые таблицы БД, но уже с использованием Transact-SQL. Нажимаем правой кнопки мыши по нашей базе данных и выбираем пункт “Создать запрос”. Прописываем необходимые команды для успешного выполнения запроса.

Если все введенное верно, то снизу экрана появится фраза об успешном выполнении команд, а в папке “Таблицы” появятся новые таблицы нашей БД, в которых уже есть все столбцы с данными.

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

SQL-скрипт для создания БД

Создадим SQL-скрипт БД. Для этого нажимаем правой кнопкой мыши по нашей БД и в меню выбираем пункт “Задачи”, после выбираем опцию “Сформировать скрипты”. В данном меню выбираем необходимые таблицы, сохраняем как “Сохранить как файл скрипта”, после чего жмем кнопку “Готово”. Если все прошло успешно, то на выходе получим готовый скрипт:

CREATE DATABASE Biblioteka /*Создание БД*/

COLLATE Cyrillic_General_CI_AS /*Указываем кодировку текста*/

GO/*Выполнение*/

USE Biblioteka/*Используем созданную БД для добавления таблиц*/

CREATE TABLE [dbo].[CHITATEL](/*Создаем Таблицу Читателей*/

[ID] [int] IDENTITY(1,1) NOT NULL,/*Добавляем аттрибут "Айди для Читателей" с числовым значением*/

[ФИО_читателя] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "ФИО читателя" со строковым значением в длинну 100 символов*/

[Адрес] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Адрес" со строковым значением в длинну 100 символов*/

[Дата_рождения] [date] NULL,/*Добавляем аттрибут "Дата рождения" с типом данных "даты"*/

[Пол] [nvarchar](3) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Пол" со строковым значением в длинну 3 символа*/

[Место_рождения] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Место рождения" со строковым значением в длинну 100 символов*/

CONSTRAINT [PK_CHITATEL_ID] PRIMARY KEY CLUSTERED/*Конструкция для указания первичного ключа для таблицы Читателей*/

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[JOURNAL](/*Создаем Таблицу Журнал*/

[ID] [int] IDENTITY(1,1) NOT NULL,/*Добавляем аттрибут "Айди для Журнала" с числовым значением*/

[Шифр_книги] [int] NULL,/*Добавляем аттрибут "Шифр книги" с числовым значением для привязки таблиц*/

[ФИО_читателя] [int] NULL,/*Добавляем аттрибут "ФИО читателя" с числовым значением для привязки таблиц*/

[Дата_выдачи] [date] NULL,/*Добавляем аттрибут "Дата выдачи" с типом данных "даты"*/

[Срок_сдачи] [date] NULL,/*Добавляем аттрибут "Срок сдачи" с типом данных "даты"*/

CONSTRAINT [PK_DVIGENIE_ID] PRIMARY KEY CLUSTERED /*Конструкция для указания первичного ключа для таблицы Журнала*/

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[KNIGI](/*Создаем Таблицу Книги*/

[ID] [int] IDENTITY(1,1) NOT NULL,/*Добавляем аттрибут "Айди для Книги" с числовым значением*/

[Шифр_книги] [int] NULL,/*Добавляем аттрибут "Шифр книги" с числовым значением*/

[Название] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Название" со строковым значением в длинну 100 символов*/

[Фамилия_автора] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Фамилия автора" со строковым значением в длинну 100 символов*/

[Имя_автора] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Имя автора" со строковым значением в длинну 100 символов*/

[Отчество_автора] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Отчество автора" со строковым значением в длинну 100 символов*/

[Жанр] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Жанр" со строковым значением в длинну 100 символов*/

[Издательство] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Жанр" со строковым значением в длинну 100 символов*/

[Год_издания] [int] NULL,/*Добавляем аттрибут "Год издания" с числовым значением*/

[Страницы] [int] NULL,/*Добавляем аттрибут "Страницы" с числовым значением*/

[Количество_экземпляров] [int] NULL,/*Добавляем аттрибут "Количество экземпляров" с числовым значением*/

[Местонахождение] [nvarchar](100) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Местонахождение" со строковым значением в длинну 100 символов*/

CONSTRAINT [PK_KNIGI_ID] PRIMARY KEY CLUSTERED /*Конструкция для указания первичного ключа для таблицы Книги*/

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Движение](/*Создаем Таблицу Журнал*/

[ID] [int] NOT NULL,/*Добавляем аттрибут "Айди для Движения" с числовым значением*/

[ФИО читателя] [int] NULL,/*Добавляем аттрибут "ФИО читателя" с числовым значением для привязки таблиц*/

[Название книги] [int] NULL,/*Добавляем аттрибут "Название книги" с числовым значением для привязки таблиц*/

[Когда выдана] [date] NULL,/*Добавляем аттрибут "Когда выдана" с типом данных "даты"*/

[Срок сдачи] [date] NULL,/*Добавляем аттрибут "Срок сдачи" с типом данных "даты"*/

CONSTRAINT [PK_Движение] PRIMARY KEY CLUSTERED /*Конструкция для указания первичного ключа для таблицы Движения*/

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Книги](/*Создаем Таблицу Книги*/

[ID] [int] NOT NULL,/*Добавляем аттрибут "Айди для Книги" с числовым значением*/

[Название] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Название" со строковым значением в длинну 30 символов*/

[ФИО автора] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "ФИО автора" со строковым значением в длинну 30 символов*/

[Жанр] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Жанр" со строковым значением в длинну 30 символов*/

[Количество страниц] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Количество страниц" со строковым значением в длинну 30 символов*/

[Количество экземпляров] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Количество экземпляров" со строковым значением в длинну 30 символов*/

CONSTRAINT [PK_Книги] PRIMARY KEY CLUSTERED /*Конструкция для указания первичного ключа для таблицы Движения*/

(

[ID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Читатель](/*Создаем Таблицу Читатель*/

[ID] [int] NOT NULL,/*Добавляем аттрибут "Айди для Читателя" с числовым значением*/

[ФИО читателя] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "ФИО читателя" со строковым значением в длинну 30 символов*/

[Дата рождения] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Дата рождения" со строковым значением в длинну 30 символов*/

[Место работы] [nchar](30) COLLATE Cyrillic_General_CI_AS NULL,/*Добавляем аттрибут "Место работы" со строковым значением в длинну 30 символов*/

CONSTRAINT [PK_Читатель] PRIMARY KEY CLUSTERED /*Конструкция для указания первичного ключа для таблицы Движения*/

GO

ALTER TABLE [dbo].[JOURNAL] WITH CHECK ADD CONSTRAINT [FK_DVIGENIE_CHITATEL] FOREIGN KEY([ФИО_читателя])

REFERENCES [dbo].[CHITATEL] ([ID])/*Создание связи таблиц Журнала и Читателей*/

GO

ALTER TABLE [dbo].[JOURNAL] CHECK CONSTRAINT [FK_DVIGENIE_CHITATEL]

GO

ALTER TABLE [dbo].[JOURNAL] WITH CHECK ADD CONSTRAINT [FK_DVIGENIE_KNIGI] FOREIGN KEY([Шифр_книги])

REFERENCES [dbo].[KNIGI] ([ID])/*Создание связи таблиц Журнала и Книги*/

GO

ALTER TABLE [dbo].[JOURNAL] CHECK CONSTRAINT [FK_DVIGENIE_KNIGI]

GO

ALTER TABLE [dbo].[Движение] WITH CHECK ADD CONSTRAINT [FK_Движение_Книги] FOREIGN KEY([Название книги])

REFERENCES [dbo].[Книги] ([ID])/*Создание связи таблиц Движения и Книги*/

GO

ALTER TABLE [dbo].[Движение] CHECK CONSTRAINT [FK_Движение_Книги]

GO

ALTER TABLE [dbo].[Движение] WITH CHECK ADD CONSTRAINT [FK_Движение_Читатель] FOREIGN KEY([ФИО читателя])

REFERENCES [dbo].[Читатель] ([ID])/*Создание связи таблиц Движения и Читателей*/

GO

ALTER TABLE [dbo].[Движение] CHECK CONSTRAINT [FK_Движение_Читатель]

GO

ALTER TABLE [dbo].[CHITATEL] WITH CHECK ADD CONSTRAINT [CH_CHITATEL_ПОЛ] CHECK (([Пол]='Жен' OR [Пол]='Муж'))/*Проверка на пол*/

GO

ALTER TABLE [dbo].[CHITATEL] CHECK CONSTRAINT [CH_CHITATEL_ПОЛ]

GO

USE [master]

GO

ALTER DATABASE [Библиотека] SET READ_WRITE

GO

Вывод

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

Соседние файлы в предмете Безопасность систем баз данных