Анализ структуры таблицы базы данных
- 15 мин
Общие сведения о структурировании таблиц и их использовании в SQL Azure — это ключ к разработке хорошей модели данных приложения.
В приложении справочника по играм карточек многие различные типы данных должны храниться в базе данных, чтобы они могли представлять физические карточки как можно точнее в этой цифровой среде.
В этом уроке вы узнаете об основах таблиц баз данных в SQL Azure, их хранении и типах данных, которые они могут хранить.
Реляционные базы данных и модели данных
Реляционная база данных — это тип базы данных, в которой хранятся данные в строках и столбцах, которые объединяются для создания структур, называемых таблицами, аналогично вводу данных в электронную таблицу Excel. Таблицы в базе данных можно связать по уникальным значениям ключей; Например, идентификатор продукта в таблице продуктов, на который ссылается таблица заказов. Вы также можете иметь ключевые значения, связанные в иерархии с отношением "один ко многим" или "родительский-дочерний". Модель данных представляет таблицы в реляционной базе данных и как они подключаются друг к другу или ссылаются друг на друга.
Что такое таблица базы данных?
Таблицы являются одним из многих объектов в реляционной базе данных, но на сегодняшний день являются наиболее важными. Без таблиц, как и где мы будем хранить данные? Таблицы похожи на электронные таблицы, состоящие из столбцов и строк. Зачем вообще база данных, когда можно просто использовать электронные таблицы? Представьте себе, что тысячи тысяч электронных таблиц на компьютере содержат миллионы или миллиарды строк. Как выполнить поиск по этим файлам? Как они логически и физически хранятся и упорядочены? Базы данных позволяют хранить эти "электронные таблицы" в структурированной и упорядоченной методологии, обеспечивая мгновенный доступ к любой записи в любой таблице с подсекундными скоростями.
Как и в электронных таблицах, таблицы состоят из строк (горизонтальный элемент) и столбцов (вертикальный элемент). Столбец можно рассматривать как атрибут того, что наша таблица хранит или описывает. Вы можете представить строку в таблице как запись, которая состоит из данных в этих столбцах. Когда строки и столбцы пересекаются, это называется полем , как ячейка в электронной таблице. Хотя количество записей или строк в таблице ограничено объемом хранилища компьютера или дискового пространства, к которому имеет доступ ваша база данных, количество столбцов ограничено 1024. Таблицы с сотнями столбцов трудно обслуживать, это как искать скрепку на дне ящика для мелочей. Таблицы являются постоянными структурами в базе данных, но в некоторых сценариях можно использовать временную таблицу, которая будет описана далее в этом модуле.
В этих таблицах, структурированных в формате строки и столбца, являются данные, которые могут храниться в виде чисел, дат, текста, двоичных объектов или даже в виде документов JSON. Наряду с связями между таблицами можно применять наборы правил для ограничения или улучшения данных, которые можно хранить в таблице.
Ниже приведены некоторые правила, которые можно применить:
- Возможность ограничить, может ли поле в строке иметь значение NULL или требовать значение
- Назначение значения по умолчанию, если значения не заданы
- Определение и ограничение допустимых значений
- Автоматическая вставка данных, производных из вычисленного значения на основе других столбцов таблицы
Приложение для информации об игре в карты будет иметь такие поля, как название карты, идентификатор карты и цвет карты, при этом каждая карта является записью в таблице. С помощью этого сценария можно увидеть, как строки и столбцы в таблице содержат сведения, относящиеся к одной из игровых карточек на следующем рисунке.
Оптимизированные для памяти таблицы
Azure SQL также содержит оптимизированные для памяти таблицы, таблицы, хранящиеся в основной памяти сервера базы данных, где строки считываются и записываются непосредственно в память. Однако есть также физическая копия таблицы на диске для устойчивости, если есть сценарий перезапуска или аварийного восстановления. В этом модуле вы не будете работать с оптимизированными для памяти таблицами, но важно знать, что они существуют.
Как видно, принятие интеллектуальных решений о структуре таблиц перед реализацией любого кода может обеспечить надежную и расширяемую модель данных, которая может расти и развиваться вместе с приложением.
Сравнение типов данных SQL Azure
При определении столбцов в таблице необходимо не только определить его с именем, уникальным для таблицы, но и назначить его типу данных. Типы данных — это атрибуты столбцов, которые указывают тип данных, которые могут содержать такие данные, как числа, текст и даты.
Решите, когда следует использовать тип данных
Хранение данных в базе данных требует внимательного просмотра типа данных, которые требуется хранить. Это деньги? Какого размера будут мои числа? Нужно ли хранить десятичные разряды? Требуется ли приложению база данных хранить изображения? Сколько текста нужно хранить в столбце? В зависимости от этих ответов у вас есть определенные типы данных, которые можно использовать для каждого сценария.
Ниже приведены некоторые распространенные типы данных, используемые в SQL Azure:
-
Символ. Если вы хотите сохранить символ или текст в базе данных, SQL Azure предоставляет
nchar
типы данных иnvarchar
типы данных. Используйтеnchar
для текстовых данных фиксированного размера иnvarchar
для текстовых данных переменной размера. Использованиеmax
в качестве длиныnvarchar
позволяет хранить текст до 2 ГБ длиной в поле в строке.Nchar
иnvarchar
также позволяют использовать многобайтовые символы, которые отображаются на таких языках, как японский и китайский. -
Десятичное: числа с определенной
decimal
точностью используют тип данных. Этот тип данных должен быть определен двумя переменными. Во-первых, точность (p) или максимальное общее число десятичных цифр, которые необходимо сохранить. Во-вторых, шкала(ы), количество десятичных цифр, которые хранятся справа от десятичной запятой. -
Целые числа: при хранении точных чисел, которые не должны содержать десятичные значения, можно использовать
integer
типы. Большинство вариантов использования попадают в использование типа данныхint
, но для особых случаев существуют другие целые типы. Для небольших значений можно использоватьtinyint
иsmallint
; для больших чисел лучше всегоbigint
. Тип данных денег можно использовать для хранения валюты. - Бит : тип данных
bit
может содержать только значения 0 или 1, что делает его идеальным для логических данных или данных типа истина/ложь. -
даты и времени: аналогично типам данных чисел, можно хранить даты и время в базе данных с различными уровнями точности. Тип данных
date
сохраняет данные в базе данных в формате YYY-MM-DD. Если вам нужна более точность, можно использовать тип данныхdatatime2
, который сохраняет дату в формате YYY-MM-DD hh:mm:ss[.nnnnnnn]. Если вам нужно время, можно использовать тип данныхtime
, который использует формат hh:mm:ss[.nnnnnnn]. Если вы создаете приложение с глобализацией, вы можете использоватьdatetimeoffset
тип данных, содержащий сведения о часовом поясе. -
Двоичные данные: если требуется хранить такие данные, как изображения или файлы, можно использовать
binary
иvarbinary
типы данных. Тип данныхbinary
предназначен для двоичных данных фиксированной длины, аvarbinary
— для двоичных данных переменной длины. -
Пространственный: SQL Azure имеет два типа пространственных данных;
geometry
иgeography
. Типgeometry
представляет данные в системе координат Евклиды (плоской), а типgeography
представляет данные в системе координат вокруг земли. После хранения данных в базе данных с помощью этих типов можно выполнять пространственные операции с SQL, например запросы ближайшего соседа (где ближайший ресторан пиццы к моему расположению) или расположения точек в геометрическом пространстве (где x, y и z пересекаются на графе).
Используя новые знания о типах данных базы данных, вернитесь к модели данных приложения карточек. Можно увидеть, что такие столбцы, как card_id
и card_power
, будут типы чисел, где card_name
, card_type
и card_color
будут текстовыми типами данных. Арт карты необходимо сохранить, поэтому использование varbinary
на максимальной величине позволит вам хранить изображения в таблице.
Как хранятся таблицы?
В файловой системе, в которой находится база данных, таблицы хранятся на страницах. Эти страницы — это 8K-файлы, которые могут быть в виде данных, текста/изображения или индексных страниц. Как и индекс книги или статьи, каждая страница начинается с раздела заголовка, описывающего то, что находится на странице. Эти сведения заголовка включают номер страницы, тип страницы, объем свободного места на странице и идентификатор единицы выделения объекта, которому принадлежит страница. Экстенты содержат восемь физически смежных страниц, поэтому базы данных SQL Azure имеют 16 экстентов на мегабайт. (64K на экстент * 16 экстентов = 1024K или 1 МБ) Вы можете узнать больше об этой теме в руководстве по архитектуре страниц и экстентов .
Почему важно, как хранятся таблицы? При проектировании модели данных и определении типов данных и размерах используемых типов данных необходимо учитывать, что данные из одной страницы не могут передаваться и продолжаться на другой странице. Создание столбцов с типами данных, которые всегда используют максимальный размер, может привести к проблемам с производительностью, так как страницы потенциально могут быть созданы для каждой строки.