Несколько вопросов по проектированию MySQL БД?

При написании ручками DDL схемы БД, возникло несколько вопросов, хотелось бы получить более подробного ответа, а не в виде Y/N

Вот собственно вопросы на которые хотелось бы получить ответы:
  1. Нужно ли указывать DEFAULT NULL, есть поле и так NULL birthday DATE NULL
  2. Нужно ли для поля id указывать NOT NULL если оно auto_increment
  3. Нужно ли полю с PRIMARY KEY указывать NOT NULL
  4. Нужно ли менять кодировку полю data BINARY на COLLATE `binary`, если таблица в UTF-8
  5. Если БД и таблицы в utf8mb4_unicode_ci но есть поле в котором возможны только латинские буквы присвоить кодировку latin1 что еще измениться кроме потери кириллицы (Размер таблицы, прирост скорости...)
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
@immelnikoff
Изучаю БД
1. NULL указывает, что поле может принимать значение NULL, а DEFAULT NULL указывает, что значением по умолчанию для данного поля является NULL. Если в описании поля отсутствует [NOT NULL | NULL], то по умолчанию принимается NULL. Если в описании поля отсутствует [DEFAULT default_value], то при NULL по умолчанию принимается DEFAULT NULL, в противном случае значение по умолчанию не определено.
Например,
5c7048fc61843823713050.png
То есть, если поле NULL, то DEFAULT NULL можно не указывать.
2. Если поле id является PRIMARY KEY, то независимо оттого, является оно автоинкрементным или нет, нельзя указать для него NULL (будет ошибка). При этом, если отсутствует NOT NULL, то оно подразумевается по умолчанию. Так, что для первичного ключа NOT NULL можно не писать.
3. см. п.2
4. Тип BINARY хранит двоичные (бинарные) строки. Для бинарных данных понятие кодировки не определено, так как понятие кодировки имеет смысл только для текстовых данных. Можно ли менять кодировку для поля BINARY или нет, я не знаю, но это просто бессмысленно.
5. Как реализовано в MySQL я не знаю, но из чисто теоретических соображений, если текстовое поле не может содержать (исходя из модели данных) символов за пределами однобайтовой кодировки, то лучше установить для поля эту однобайтовую кодировку. Во-первых, это уменьшит занимаемое пространство (русские буквы в UTF-8 весят по 2 байта), а во-вторых, если у вас данное поле типа CHAR, то в однобайтовой кодировке оно будет иметь фиксированный размер в байтах, что должно положительно сказаться на производительности.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы