lab_erd.md 6.2 KB

Лабораторная работа "Создание 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. Подготовьте описание своей предметной области (произвольный текст)
  2. Реализуйте ER-диаграмму по этой предметной области в программе MySQL Workbench. В диаграмме должно быть не менее 5 таблиц и обязательно оба типа связей ("один-ко-многим" и "многие-ко-многим")

В репозитории опубликовать readme.md, который должен включать описание предметной области и ссылку на PDF-файл диаграммы. Также в репозиторий включить исходный файл диаграммы.

Базу по разработанной диаграмме пока не создавайте - я ее проверю

Допускается совместная работа, но в этом случае предметная область должна делиться на подсистемы (например, продажи продукции и складской учет) и каждый участник совместного репозитория должен работать со своей подсистемой (и публиковать изменения в репозиторий под своим именем)

Этот репозиторий послужит основой для большого проекта, в следующих лабораторных мы напишем словарь данных, создадим DDL-скрипт, наборы данных, сделаем импорт...