dataBases

Ничего нового просто заметка для себя)

  1. Базовые понятия
  2. Виды связей
  3. Нормальные формы
  4. Типы данных
  5. Движки в MySQL


Базовые понятия:
Информация — сведения, воспринимаемые человеком или специальными устройствами как отражение фактов материального мира в процессе коммуникации(то что мы услышали)
Да́нные — зарегистрированная информация(то что мы услышали и записали).

Relation — отношения, базы данных названы реляционными, потому что данные собраны в таблицы, а не из-за отношений между таблицами.
Отношения — это таблица
Записи — строки
Поля — столбцы
Атрибут — именованный столбец таблицы(как называется столбец)
Домен — тип данных с ограничениями (например порядковый номер должен быть больше 0)
Кортеж — строки таблицы со значениями разных атрибутов
Ключ — может быть составной, уникальный атрибут по которому можем идентифицировать запись
DML(Data Manipulation Language) к ним относятся:Select,Insert,Update,Delete
DDL(Data Definition Language) к ним относятся: Create,Alter,Drop
DCL(Data Control Language) к ним относятся: Grant,Revoke

Виды связей:
«Один-к-одному» — любому экземпляру сущности А соответствует только один экземпляр сущности В, и наоборот.
У любого конкретного ученика может быть только одна характеристика, и эта характеристика относится к единственному ученику.
«Один-ко-многим» — любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, но любому экземпляру сущности В соответствует только один экземпляр сущности А.
Ученику ставят много оценок; поставленная оценка принадлежит только одному ученику.
«Многие-к-одному» — любому экземпляру сущности А соответствует только один экземпляр сущности В, но любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А.
Преподаватель работает только в одном кабинете, однако рабочий кабинет может быть закреплен за несколькими преподавателями.
Какая же разница между связями «один-ко-многим» и «многие-к-одному»? Такая же, как между фразами «портфель ученика» и «ученик портфеля». То есть важно, кто во взаимоотношении двух объектов главный — ученик или портфель. Суть отношений двух объектов отражается в имени связи.
«Многие-ко-многим» — любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, и любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А.
Ученик Иванов учится у нескольких преподавателей. И каждый преподаватель работает со многими учениками.

Нормальные формы:
1NF атомарность — в одном поле только одно значение, например в поле дом 1, нельзя 1-3,7
2NF избыточность — вынести все заранее определенные данные в справочники(в справочник выносятся все поля которые явно относятся к обьекту), и в таблице на них ссылаться,у любой таблицы есть ключ, у полей есть id. те грубо говоря мы делаем сcылку на справочник
3NF зависимости, отсутствие зависимостей в самой таблице, например если число нечетное ветер дует на юг. те в таблице нет никаких внутренних зависимостей.

Типы данных:
Числовые
Целые:

Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

INT(M) M- это не к-во байт это ширина строки которая используется для отображения
ZEROFILL — слева добиваем нулями до нужной длинны указанной в скобках.
UNSIGNED — беззнаковое. Например порядковый номер, обычно, беззнаковый, поэтому можем больше вместить значений, не увеличивая его разрядность)
BOOLEAN(M) — 0 или 1 байт

Числа с плавающей точкой
M общее к-во символов, D количество символов после запятой
FLOAT(разрядность) [ZEROFILL] Число с плавающей точкой. Не может быть объявлено беззнаковым. Разрядность может быть <= 24 (чисел с низкой разрядностью) или от 25 до 53 (для чисел с двойной разрядностью). Аналогами этих двоих типов являются описанные ниже типа FLOAT и DOUBLE.

FLOAT[(M,D)] [ZEROFILL] 4 байта Значения от -3.402823466E+38 до -1.175494351E-38, 0 и от 1.175494351E-38 до 3.402823466E+38.

DOUBLE[(M,D)] [ZEROFILL] 8 байта Значения от -1.7976931348623157E+308 до -2.2250738585072014E-308, 0 иот 2.2250738585072014E-308 до 1.7976931348623157E+308 Синонимы REAL и DOUBLE PRECISION

DECIMAL[(M[,D])] [ZEROFILL] M+2 байт Unpacked число с плавающей точкой. Unpacked означает то, что значение хранится в строке, по символу на каждый разряд числа, точку и знак. Диапазон значений этого типа такой же, как и у DOUBLE. Синонимы: NUMERIC, DEC.

Строковые
[NATIONAL] CHAR(M) [BINARY] Строка, всегда имеющая длину M (в случае, когда занесенное значение короче, оно дополняется пробелами). M может лежать в пределах от 1 до 255. Приставка NATIONAL указывает на необходимость использования кодовой таблицы, используемой по умолчанию.
CHAR читать проще, потому что есть стандартный сдвиг, всегда занято одинаковое к-во байт(независимо от к-ва данных в ячейке)

[NATIONAL] VARCHAR(M) [BINARY] Аналогично CHAR, за исключением того, что длина значения может быть произвольной (от 1 до 255) реальный обьем занятой памяти к-во символов+1

TINYBLOB (TINYTEXT) Тип BLOB или TEXT, длиной от 1 до 255 символов.

BLOB (TEXT) Тип BLOB или TEXT, длиной от 1 до 65535 символов.

MEDIUMBLOB (MEDIUMTEXT) Тип BLOB или TEXT, длиной от 1 до 16777215 символов.

LONGBLOB (LONGTEXT) Тип BLOB или TEXT, длиной от 1 до 4294967295 символов.

Календарные
DATE 3 байта Тип для хранения даты. Допустимые значения — от ‘1000-01-01’ до ‘9999-12-31’. Дата хранится в виде YYYY-MM-DD.

DATETIME 8 байт Комбинация даты и времени. Допустимые значения — от ‘1000-01-01 00:00:00’ до ‘9999-12-31 23:59:59’. Данные зранятся в виде ‘YYYY-MM-DD HH:MM:SS’.

TIMESTAMP[(M)] 4 байта , удобно для учета часового пояса. Значения лежат в диапазоне от ‘1970-01-01 00:00:00’ до некоторого времени в 2037-году. В зависимости от значения параметра M формат хранения данных может быть YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD или YYMMDD (значения 14, 12, 8 или 6). По умолчанию в поля такого типа значения заносятся с текущими датой и временем.

TIME 3 байта Время. Значения могут лежать в границах ‘-838:59:59’..’838:59:59′ и представляются в формате ‘HH:MM:SS’.

YEAR 1 байт [(2 или 4)] Хранит год. В зависимости от значения указанного в скобках (по умолчанию — 4), год хранится в виде YYYY(1970-2069) или YY(1901-2155)

Дополнительные
ENUM(‘значение1’, ‘значение2’, …) одно из значений! 1 или 2 байта. Перечислимый тип — тип, значения которого строго определены (списком в скобках). Допустимое количество значений — от 1 до 65535.

SET(‘значение1’, ‘значение2’, …) 1-4 или 8 байт Набор (множество) — тип, значения которого могут быть множествами, состоящими из элементов, указаных в скобках. Каждое множество может иметь не больше 64 элементов.

Замечания по типам данных:
NULL — старайтесь избегать использовать, лучше писать 0, а во время создания указывать NOT NULL и указывать default 0.
влияет на concat если к строке добавить NULL получим NULL
влияет на avg, при подсчете среднего NULL строки не учитываются
при count (*) считает к-во строк втч NULL
count(field) считает к-во NOT NULL строк

Движки MySQL:
OLTP изменение данных в таблице
OLAP выборка(анализ)

обычно используют неидентифицирующую связь.
идентифицирующая связь — тогда бы внешне поле стало составным первичным ключем!

SHOW ENGINES; отобразить движки
CREATE TABLE t (i INT) ENGINE =INNODB; —задание движка при создании таблицы
ALTER TABLE t ENGINE = MYISAM; —изменение движка

db.opt — текстовый файл, задает параметры нашей БД
*.frm — хранится описание структуры таблицы
*.trg — хранит триггеры в текстовом виде

INNODB
данные хранятся ОТДЕЛЬНО! с версии 5.6 поддерживается полнотекстовый индекс
отдельно хранятся журналы транзакций. перенос бд только через дамп.
очень рекомендуется по умолчанию

MyISAM
быстрый INSERT, DELETE… не требователен к ресурсам. хранит данные в виде отдельных файликов
хранит данные в файлах MYD-данные MYI- индексы
не поддерживает foreighn key, нельзя поставить связи
не поддерживает транзакции
есть блокировки LOCK
есть полнотекстовый поиск
Устарел и будет выпилен.

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

CSV
почти не используется
данные хранятся в текстовом csv файле, а также есть csm файл в котором хранится чтото типа индексов, справочный файл.
по скорости сравним с MyISAM. по чтению чуть быстрее
форейн кей нет
транзакций нет

MERGE (MRG_MYISAM)
коллекция одинаковых MyISAM таблиц

BerkleyDB
для совместимости с BDB

MEMORY
хранит данные в озу — временные таблицы!!
сохранность данных не гарантируется, структура сохраняется

FEDERATED
Позволяет использовать данные с удаленных серверов, без необходимости строить кластер.
отключен по умолчанию

BLACKHOLE
все данные пишутся в /dev/null необходимо для отладки

ИТОГ
Временные таблицы -MEMORY
остальные задачи INNODB.


Комментарии: