В базах данных SQL поддерживаются различные типы данных. Например, переменные varchar/символы, текст, целое число, десятичное число, отметка времени, дата, время, деньги и серийный номер. Типы данных Varchar аналогичны типам текстовых данных, но вы можете ограничить длину ввода данных. Типы текстовых данных не являются ограничивающими и будут вводиться как текст. Целочисленный тип данных представляет собой полные числа и не содержит десятичных знаков, в то время как данные десятичного типа содержат десятичные знаки. Существуют различные способы отслеживания данных и времени. Вы можете использовать метку времени, которая будет содержать дату и время в одном поле. Или вы можете разделить их, используя типы данных даты и времени в разных столбцах. Денежный тип данных преобразует введенное вами число в денежный формат. Последовательный тип данных автоматически увеличивается и может использоваться в качестве первичного ключа для вашей таблицы.

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

Нормализация — это процесс разделения таблицы для сведения к минимуму повторяющихся записей данных. Первая нормальная форма, или 1НФ, — это процесс устранения повторяющихся групп/столбцов в таблице. Например, если у вас есть таблица регистрации классов, учащиеся будут записываться на несколько классов. Вместо того, чтобы иметь столбцы для классов с 1 по 6, у вас будет одна запись для каждого учащегося в классе. Таким образом, для имени ученика будет много целых чисел, но будет только один столбец класса.

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

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

Postgres имеет полную поддержку ACID, что означает атомарность, согласованность, изоляцию и долговечность. Атомарность — это принцип «все или ничего», означающий, что если часть вашей транзакции терпит неудачу, вся транзакция терпит неудачу. Согласованность означает, что любая транзакция будет поддерживать базу данных в силе. Изоляция означает выполнение транзакций по порядку, когда незавершенная транзакция не будет задерживать другую транзакцию. Долговечность означает стабильность ваших данных после завершения транзакции. Если произошло отключение питания, сбой или другие ошибки, ваша транзакция все равно будет завершена и не будет потеряна. ACID гарантирует, что ваши данные будут у вас, когда вы попытаетесь извлечь их из своей базы данных, и разрешит изменения только в том случае, если введенные данные действительны, предотвращая повреждение данных. Postgres также поддерживает управление многоверсионным параллелизмом, которое не блокирует и позволяет конечным пользователям получать данные без задержки. Postgres позволяет хранить данные типа JSON в базе данных, которая имеет функцию, которая проверяет, является ли сохраненное значение допустимым значением JSON.