Руководство для начинающих по написанию схем базы данных mySQL

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

На удивление проще, чем можно было бы подумать, давайте изучим различные аспекты, используемые для написания хорошо спроектированной схемы базы данных.

CREATE TABLE Синтаксис

Для начала откройте свой любимый текстовый редактор . Для создания схемы базы данных требуется не что иное, как простой текстовый файл. База данных состоит из нескольких таблиц, каждая из которых состоит из столбцов, и синтаксис CREATE TABLE используется для создания одной таблицы. Вот простой пример:

 
CREATE TABLE users (
id INT NOT NULL,
is_active TINY INT NOT NULL,
full_name VAR CHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);

Как видите, в результате будет создана таблица базы данных с именем users, которая состоит из четырех столбцов. Это должен быть довольно простой оператор SQL, начинающийся с CREATE TABLE , за которым следует имя таблиц базы данных, а затем в круглых скобках столбцы таблицы, разделенные запятой.

Используйте правильные типы столбцов

Как показано выше, столбцы, из которых будет состоять таблица, разделены запятыми. Каждое определение столбца состоит из трех одинаковых частей:

 COL_NAME    TYPE    [OPTIONS]

Имя столбца, за которым следует тип столбца, а затем любые дополнительные параметры. Позже мы рассмотрим необязательные параметры, но, сосредоточившись на типе столбца, ниже перечислены наиболее часто используемые типы столбцов:

Тип Описание
INT Целое число, поддерживает значения до (+/-) 2,14 миллиарда. Чаще всего используется целочисленный тип, но также доступны следующие с соответствующими диапазонами:

  • TINYINT – 128. Отлично подходит для логических значений (1 или 0).
  • МАЛЕНЬКИЙ – 32 тыс.
  • MEDIUMINT – 3,8 миллиона
  • BIGINT – 9,3 квинтиллиона.
VARCHAR (xxx) Строка переменной длины, поддерживающая практически все недвоичные данные. Xxx в круглых скобках – максимальная длина столбца.
ДЕСЯТИЧНЫЙ (x, y) Хранит десятичные / плавающие значения, такие как цены или любые числовые значения, не являющиеся целыми числами. Числа в скобках (x, y) определяют максимальную длину столбца и количество десятичных знаков для хранения. Например, DECIMAL (8,2) позволит числам иметь длину не более шести цифр плюс отформатированные до двух десятичных знаков.
DATETIME / TIMESTAMP Оба содержат дату и время в формате ГГГ-ММ-ДД ЧЧ: II: СС. Вы должны использовать TIMESTAMP для всех метаданных строки (т. Е. Создано в, lst обновлено и т. Д.) И DATETIME для всех других дат (например, для даты рождения и т. Д.).
ДАТА Аналогично DATETIME, за исключением того, что дата сохраняется только в формате ГГГ-ММ-ДД и не сохраняется время.
ТЕКСТ Большие блоки текста, могут содержать до 65 тыс. Символов. Также доступны следующие диапазоны:

  • MEDIUMTEXT – 16,7 млн ​​знаков.
  • LONGTEXT – 4,2 миллиарда символов.
BLOB Используется для хранения двоичных данных, например изображений. Поддерживает максимальный размер 64 КБ, а также поддерживаются следующие с соответствующими ограничениями:

  • TINYBLOG – 255 байт
  • MEDIUMBLOB – 16 МБ
  • LONGBLOG – 4 ГБ
ENUM (opt1, opt2, opt3 …) Допускает только одно из предварительно определенных значений, указанных в круглых скобках. Подходит для таких вещей, как столбец статуса (например, активный, неактивный, ожидающий).

Во всех смыслах перечисленные выше типы столбцов – это все, что вам нужно для написания хорошо построенных схем базы данных mySQL.

Определить параметры столбца

При определении столбцов вы также можете указать различные параметры. Ниже приведен еще один пример оператора CREATE TABLE :

 
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
status ENUM('active','inactive') NOT NULL DEFAULT 'active',
balance DECIMAL(8,2) NOT NULL DEFAULT 0,
date_of_birth DATETIME,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Вышесказанное может показаться немного устрашающим, но не волнуйтесь, это довольно просто. Вот что происходит в приведенном выше заявлении:

  • Вы всегда должны использовать NOT NULL во всех возможных столбцах, чтобы повысить скорость и производительность таблицы. Это просто указывает, что столбец не может оставаться пустым / нулевым при вставке строки.
  • Всегда старайтесь, чтобы размер столбца был как можно меньше, поскольку это помогает повысить скорость и производительность.
  • Столбец id является целым числом, он также является первичным ключом таблицы, что означает его уникальность, и будет увеличиваться на единицу при каждой вставке записи. Обычно это следует использовать во всех таблицах, которые вы создаете, чтобы вы могли легко ссылаться на любую отдельную строку в таблице.
  • Столбец статуса является ENUM и должен иметь значение «активен» или «неактивен». Если значение не указано, новая строка будет начинаться со статусом «активный».
  • Столбец баланса начинается с 0 для каждой новой строки и представляет собой сумму, отформатированную двумя двумя десятичными точками.
  • Столбец date_of_birth представляет собой просто DATE, но также допускает нулевое значение, поскольку дата рождения может быть неизвестна при создании.
  • Наконец, столбец created_at является TIMESTAMP и по умолчанию соответствует текущему времени, когда была вставлена ​​строка.

Вышеупомянутый пример хорошо структурированной таблицы базы данных, и его следует использовать в качестве примера в будущем.

Одним из самых больших преимуществ использования реляционных баз данных, таких как mySQL, является превосходная поддержка ограничений внешнего ключа и каскадирования. Это когда вы связываете две таблицы вместе столбцом, образуя отношение «родитель-потомок», поэтому при удалении родительской строки автоматически удаляются и необходимые дочерние строки.

Вот пример:

 
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) NOT NULL UNIQUE,
full_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) engine=InnoDB;
CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
userid INT NOT NULL,
amount DECIMAL(8,2) NOT NULL,
product_name VARCHAR(200) NOT NULL,
FOREIGN KEY (userid) REFERENCES users (id) ON DELETE CASCADE
) engine=InnoDB;

Вы заметите предложение FOREIGN KEY в последней строке. В этой строке просто говорится, что эта таблица содержит дочерние строки, которые связаны столбцом идентификатора пользователя со своей родительской строкой, которая является столбцом идентификатора таблицы пользователей . Это означает, что каждый раз, когда строка удаляется из таблицы пользователей , mySQL автоматически удаляет все соответствующие строки из таблицы заказов, помогая обеспечить структурную целостность в вашей базе данных.

Также обратите внимание на engine = InnoDB в конце приведенного выше оператора. Хотя InnoDB теперь является типом таблицы mySQL по умолчанию, это было не всегда, поэтому его следует добавить на всякий случай, поскольку каскадирование работает только с таблицами InnoDB.

Дизайн с уверенностью

Теперь вы на правильном пути к созданию надежных, хорошо структурированных схем базы данных mySQL. Используя вышеупомянутые знания, вы теперь можете писать хорошо организованные схемы, обеспечивающие как производительность, так и структурную целостность.

Имея свою схему, убедитесь, что вы знаете, как использовать ее с этими важными командами SQL .