Ничего нового просто заметка для себя)
Базовые понятия:
Информация – сведения, воспринимаемые человеком или специальными устройствами как отражение фактов материального мира в процессе коммуникации(то что мы услышали)
Да́нные — зарегистрированная информация(то что мы услышали и записали).
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.