|
|
@@ -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-скрипт, наборы данных, сделаем импорт...
|