Восстановление базы данных из скрипта. Содержание Представления (View)
# Импорт данных (вариант 22). >Разбор импорта данных из задания 22 года [variant22.zip](../data/variant22.zip) >Эта лекция написана с использованием программы **dBeaver**, т.к. я не нашёл как в в **MySQL Workbench** визуально добавить внешний ключ. ## Текст задания >Для восстановления таблиц в созданную базу данных воспользуйтесь предоставленным скриптом (ms.sql или my.sql в зависимости от выбранной СУБД). В процессе разработки приложения Вы **должны доработать эту базу данных**, обеспечив хранение всех данных, которые предоставил Вам заказчик. Для этого вам необходимо будет **добавить необходимые сущности, атрибуты и связи**. В файле импорта добавьте или измените команду создания БД. В команде **use** укажите название вашей БД (`<ваш логин>_<суффикс>`). ```sql create database ekolesnikov_v22; use ekolesnikov_v22; ``` Дальше желательно проверить скрипт на использование ключевых слов **SQL** в именах сущностей или атрибутов (в этом скрипте используется зарезервированное слово **Order**). Такие слова нужно экранировать (заключить в обрантые кавычки: \``Order`\`) либо сразу запустить скрипт и править ошибки по мере выявления (тут придётся комментировать уже выполненные части скрипта) ![](../img/sql005.png) После разворачивания структуры нужно визуально убедиться, что она соответсвует **3НФ**. ## Проверка структуры ![](../img/sql006.png) Например, в таблице **Product** первичным ключём сделан *Артикульный номер* с типом **строка**. Нужно добавить синтетический первичный ключ **ProductID** и переделать связь с ним из таблицы **OrderProduct**. Нам нужно: удалить существующую связь, добавить синтетический первичный ключ, создать новую связь с новым первичным ключём. 1. Удалим связь с продукцией из таблицы связей **OrderProduct** (иначе мы не сможем удалить существующий первичный ключ) ![](../img/sql007.png) У таблицы **OrderProduct** два внешних ключа и неочевидные названия связей. Открываем связи и смотрим на какую таблицу они ссылаются. Нам нужно удалить ту, которая ссылается на таблицу **Product** (ключ не удаляется, если таблица открыта для просмотра). 1. В таблице **Product** удалите первичный ключ (он находится во вкладке *Ограничения*) 1. Сохраните изменения ![](../img/sql010.png) 1. В таблицу **Product** добавьте новую колонку (в контекстном меню *Колонки -> Создать объект колонка*), пока не включая авто инкемент (иначе потом невозможно создать первичный ключ). ![](../img/sql008.png) В контекстном меню *Ограничения -> Создать объект оганичения* добавить первичный ключ на созданное поле ![](../img/sql009.png) Сохраните изменения Добавьте авто инкремент и снова сохраните ![](../img/sql011.png) 1. В таблице **OrderProduct** удалите поле *ProductArticleNumber*, ограничения и внешние ключи (поле не даёт удалять, пока есть ограничение, ограниение не даёт удалять пока есть внешний ключ...). ![](../img/sql012.png) 1. Создайте поле **ProductID** и добавьте внешние ключи для полей **OrderID** и **ProductID** ![](../img/sql013.png) Получилось очень сложно, проще всё это поправить в скрипте ДО его выполнения (и даже не нужно особенно знать синтаксис **SQL** - в скрипте уже все команды написаны). ## Проверка исходных данных Для импорта у нас есть 4 файла: `user_import.xlsx`, `Заказ_import.xlsx`, `Пункты выдачи_import.xlsx` и `Товар_import\Товар_import_Столовые приборы.xlsx` Чтобы определиться, в каком порядке их импортировать, нужно читать задание. Там сказано, что сначала нужно показать окно авторизации, а затем список продукции. Таким образом, первыми мы будем импортировать `user_import.xlsx` и `Товар_import\Товар_import_Столовые приборы.xlsx` * `user_import.xlsx` - в этом файле нужно разбить ФИО на составные части. И в **excel** и в **SQL** есть методы разбиения строки на части. * `Товар_import_Столовые приборы.xlsx` - в структуре БД нет полей для "Единица измерения", "Размер максимально возможной скидки", "Поставщик" - Поля "Категория", "Производитель" и "Поставщик" должны быть словарями # Задание * исправить скрипт создания БД (создать недостающие таблицы и связи) и выполнить его >Переименуйте таблицы, которые у вас уже есть в БД * импортировать данные из файлов `user_import.xlsx` и `Товар_import_Столовые приборы.xlsx`
Восстановление базы данных из скрипта. Содержание Представления (View)