Răsfoiți Sursa

лаба для erd

Евгений Колесников 5 luni în urmă
părinte
comite
6d98a34cf7
2 a modificat fișierele cu 65 adăugiri și 6 ștergeri
  1. 62 0
      articles/lab_erd.md
  2. 3 6
      readme.md

+ 62 - 0
articles/lab_erd.md

@@ -0,0 +1,62 @@
+# Лабораторная работа "Создание ER-диаграммы по своей предметной области" 
+
+В прошлом году я предупреждал, что каждому нужно определиться с предметной областью, по которой он будет писать лабы и курсовые проекты.
+
+## Основные типы данных MySQL и рекомендации по их использованию
+
+### Числовые типы
+
+* `INT()` - целое число (32-разрядное). 
+
+    >Указание размера в скобках является справочной информацией для инструментов и не влияет на диапазон значений или объем памяти, занимаемый данными. 
+
+    Ещё есть целочисленные типы:
+
+    - `TINYINT` - аналог байта (8 бит)
+    - `SMALLINT` - слово (16 бит)
+    - `MEDIUMINT` - прямого аналога в C# нет, занимает 24 бита
+    - `BIGINT` - длинное целое (64 бита)
+
+* `FLOAT` и `DOUBLE` - `32` и `64` разрядные числа с плавающей запятой
+
+* `DECIMAL(M,D)` и `NUMERIC(M,D)` - пишут что обозначают одно и то же (синонимы): числа с фиксированной запятой, наиболее понятный пример - деньги, мы не можем оперировать долями копеек.
+
+### Символьные типы
+
+* `VARCHAR()` - хранит строки переменной длины до 65 535 символов. В скобках мы указываем максимальную длину, которую может занимать строка. Первый байт или два (зависит от заявленной максимальной длины) в структуре данных этого типа хранят фактическую длину сохраненных данных. Рекомендуется использовать этот тип данных, если заранее не известна точная длина данных (ФИО, Адрес, название товара и т.п.)
+
+* `CHAR()` - хранит строку фиксированного размера (который задается при объявлении). Рекомендуется для данных у которых длина известна (номер паспорта, ИНН, СНИЛС и т.п.)
+
+* `TEXT` - используется для хранения больших (и не только) строк, например, текст статьи
+
+    - `TINYINT` - до 255 байт
+    - `TEXT` - до 64 Кбайт
+    - `MEDUIMTEXT` - до 16 Мбайт
+    - `LONGTEXT` - до 4 Гбайт
+
+### Дата/время
+
+* `DATE` - Только дата в формате `YYYY-MM-DD`. Допустимые значения от `1000-01-01` до `9999-12-31`
+* `DATETIME` - Дата и время в формате `YYYY-MM-DD HH:MM:SS`.
+* `TIMESTAMP` - Время хранится в виде количества секунд, прошедших с 1 января 1970 года по гринвичу. Занимает в два раза меньше места, чем тип `DATETIME`. Но при этом диапазон ограничен значениями от `1970-01-01 00:00:01` до `2038-01-09 03:14:07`
+* `TIME` - Только время в формате `HH:MM:SS`
+* `YEAR` - Только год в формате `YYYY` или `YY`.
+
+Как видно, полную дату можно хранить либо в `DATETIME`, либо в `TIMESTAMP`, в чём разница? `DATETIME` хранится в виде строки, т.е. он более человекочитаем, но требует больше ресурсов при сравнении (поиск по строке работает дольше, чем сравнение двух целых). `TIMESTAMP` хранится как целое и его, соответственно выгоднее использовать там, где нужно часто сравнивать даты (но обратите внимание на максимальную поддерживаемую дату)
+
+### Логический тип
+
+В MySQL нет выделенного типа данных под логический, вместо него обычно используют `TINYINT(1)`
+
+## Задание
+
+1. Подготовьте описание своей предметной области (произвольный текст)
+1. Реализуйте ER-диаграмму по этой предметной области в программе MySQL Workbench. В диаграмме должно быть не менее 5 таблиц и обязательно оба типа связей ("один-ко-многим" и "многие-ко-многим")
+
+В репозитории опубликовать `readme.md`, который должен включать описание предметной области и ссылку на PDF-файл диаграммы. Также в репозиторий включить исходный файл диаграммы.
+
+Базу по разработанной диаграмме пока не создавайте - я ее проверю
+
+Допускается совместная работа, но в этом случае предметная область должна делиться на подсистемы (например, продажи продукции и складской учет) и каждый участник совместного репозитория должен работать со своей подсистемой (и публиковать изменения в репозиторий под своим именем)
+
+Этот репозиторий послужит основой для большого проекта, в следующих лабораторных мы напишем словарь данных, создадим DDL-скрипт, наборы данных, сделаем импорт...

+ 3 - 6
readme.md

@@ -195,7 +195,7 @@ http://sergeyteplyakov.blogspot.com/2014/01/microsoft-fakes-state-verification.h
 ### Проектирование баз данных
 
 1. [Основы проектирования баз данных. ERD.](./articles/5_1_1_1_erd2.md)
-1. [Словарь данных](articles/5_1_1_1_data_dictionary.md)
+1. [Словарь данных](./articles/5_1_1_1_data_dictionary.md)
 1. [Основы SQL](./articles/sql_for_beginner.md)
 1. [Группировка, агрегатные функции, JOIN-ы](./articles/sql_advanced.md)
 1. [Создание ER-диаграммы](./articles/5_1_1_1_erd_workbench.md)
@@ -208,18 +208,15 @@ https://office-menu.ru/uroki-sql Уроки SQL
 
 В "основы" добавить 
 - count и функции работы со временем (between) 
-- транзакции
-- какая команда возвращает количество измененных строк (для триггера) 
 -->
 
 ---
 
 **Лабораторные**
 
-1. [Создание ER-диаграммы](articles/5_1_1_1_erd_workbench.md)
-
+1. [Создание ER-диаграммы](./articles/lab_erd.md)
+1. [Словарь данных](./articles/lab_dictionary.md)
 1. [Подключение к базе данных. Создание скрипта создания БД.](./articles/sql_create_db.md)
-
 1. [Импорт данных (вариант 22).](./articles/sql_import_22.md)
 
 <!--