浏览代码

вариант22

Евгений Колесников 3 年之前
父节点
当前提交
be0f1be5bd
共有 12 个文件被更改,包括 110 次插入0 次删除
  1. 108 0
      articles/sql_import_22.md
  2. 二进制
      data/variant22.zip
  3. 二进制
      img/sql005.png
  4. 二进制
      img/sql006.png
  5. 二进制
      img/sql007.png
  6. 二进制
      img/sql008.png
  7. 二进制
      img/sql009.png
  8. 二进制
      img/sql010.png
  9. 二进制
      img/sql011.png
  10. 二进制
      img/sql012.png
  11. 二进制
      img/sql013.png
  12. 2 0
      readme.md

+ 108 - 0
articles/sql_import_22.md

@@ -0,0 +1,108 @@
+<table style="width: 100%;"><tr><td style="width: 40%;">
+<a href="../articles/sql_import.md">Восстановление базы данных из скрипта. 
+</a></td><td style="width: 20%;">
+<a href="../readme.md">Содержание
+</a></td><td style="width: 40%;">
+<a href="../articles/sql_view.md">Представления (View)
+</a></td><tr></table>
+
+# Импорт данных (вариант 22).
+
+>Разбор импорта данных из задания 22 года [variant22.zip](../data/variant22.zip)
+
+>Эта лекция написана с использованием программы **dBeaver**, т.к. я не нашёл как в в **MySQL Workbench** визуально добавить внешний ключ.
+
+## Текст задания
+
+>Для восстановления таблиц в созданную базу данных воспользуйтесь
+предоставленным скриптом (ms.sql или my.sql в зависимости от выбранной СУБД). В процессе разработки приложения Вы **должны доработать эту базу данных**, обеспечив хранение всех данных, которые предоставил Вам заказчик. Для этого вам необходимо будет
+**добавить необходимые сущности, атрибуты и связи**.
+
+В файле импорта удалите или закомментируйте команду создания БД (напоминаю, что прав на **DDL** у вас нет). В команде **use** укажите название вашей БД.
+
+```sql
+-- create database trade;
+use ekolesnikov;
+```
+
+Дальше желательно проверить скрипт на использование ключевых слов **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** есть методы разбиения строки на части, но конкретно здесь проще выделить руками (10 строк).
+
+* `Товар_import_Столовые приборы.xlsx`
+
+    - в структуре БД нет полей для "Единица измерения", "Размер максимально возможной скидки", "Поставщик"
+
+    - Поля "Категория", "Производитель" и "Поставщик" должны быть словарями
+
+# Задание
+
+* исправить скрипт создания БД (создать недостающие таблицы и связи) и выполнить его
+
+    >Переименуйте таблицы, которые у вас уже есть в БД
+
+* импортировать данные из файлов `user_import.xlsx` и `Товар_import_Столовые приборы.xlsx`
+
+<table style="width: 100%;"><tr><td style="width: 40%;">
+<a href="../articles/sql_import.md">Восстановление базы данных из скрипта. 
+</a></td><td style="width: 20%;">
+<a href="../readme.md">Содержание
+</a></td><td style="width: 40%;">
+<a href="../articles/sql_view.md">Представления (View)
+</a></td><tr></table>

二进制
data/variant22.zip


二进制
img/sql005.png


二进制
img/sql006.png


二进制
img/sql007.png


二进制
img/sql008.png


二进制
img/sql009.png


二进制
img/sql010.png


二进制
img/sql011.png


二进制
img/sql012.png


二进制
img/sql013.png


+ 2 - 0
readme.md

@@ -141,6 +141,8 @@ http://sergeyteplyakov.blogspot.com/2014/01/microsoft-fakes-state-verification.h
 
 1. [Создание базы данных. Импорт данных.](./articles/sql_import.md)
 
+1. [Импорт данных (вариант 22).](./articles/sql_import_22.md)
+
 1. [Представления (View)](./articles/sql_view.md)
 
 1. [Хранимые процедуры. Триггеры.](./articles/sql_trigger.md)