Начало работы с базами данных

Базы данных и веб-приложения могут принести большую пользу вашему бизнесу. Проектирование базы данных играет важнейшую роль в достижении ваших целей независимо от того, что вам нужно: управлять сведениями о сотрудниках, предоставлять еженедельные отчеты по данным или отслеживать заказы клиентов. Уделив время изучению всех нюансов проектирования баз данных, вы сможете создавать базы, которые будут не только отвечать вашим текущим требованиям, но и адаптироваться к изменениям.
Важно: Веб-приложения Access отличаются от классических баз данных. В этой статье не рассматривается проектирование веб-приложений.
Понятия и термины
Для начала рассмотрим основные термины и понятия. Чтобы спроектировать полезную базу данных, необходимо создать таблицы с данными по одному объекту. В таблицах можно собрать все данные по этому объекту и отобразить их полях, которые содержат наименьшую единицу данных.
Реляционные базы данных
База данных, в которой данные разделены на таблицы по типу электронных. Каждая таблица включает данные по одному объекту, например по клиентам (одна таблица) или товарам (другая таблица).
Записи и поля
Области хранения отдельных данных в таблице. В каждой строке (или записи) хранится уникальный элемент данных, например имя клиента. Столбцы (или поля) содержат сведения по каждой точке данных в виде наименьшей единицы: имя может находиться в одном столбце, а фамилия — в другом.
Первичный ключ
Значение, которое обеспечивает уникальность каждой записи. Допустим, есть два клиента с одинаковыми именами, например Юрий Богданов. Но у одного из них первичный ключ записей — 12, а у другого — 58.
Иерархические отношения
Общие связи между таблицами. Например, у одного клиента может быть несколько заказов. Родительские таблицы имеют первичные ключи. Детские таблицы имеют внешниеключи , которые являются значениями из первичного ключа, которые показывают, как записи детской таблицы связаны с родительской таблицей. Эти ключи связаны отношением.
Что понимать под хорошим проектированием базы данных?
В основе проектирования хорошей базы данных лежат два принципа:
- Избегайте повторяющихся сведений (избыточных данных). Они занимают много места на диске и повышают вероятность ошибок.
- Следите за правильностью и полнотой данных. Неполные или неправильные сведения отображаются в запросах и отчетах, что в конечном итоге может привести к принятию ошибочных решений.
Чтобы избежать этих проблем:
- Разделяйте информацию в базе данных по таблицам для отдельных объектов. Избегайте повторения информации в нескольких таблицах. (Например, имена клиентов должны находиться только в одной таблице.)
- Объединяйте таблицы с помощью ключей, а не путем дублирования данных.
- Используйте процессы, которые обеспечивают точность и целостность информации в базе данных.
- Проектируйте базу данных с учетом своих требований к обработке данных и созданию отчетов по ним.
Чтобы повысить пользу баз данных в долгосрочной перспективе, выполните следующие пять шагов по проектированию:
Шаг 1. Определение назначения базы данных
Прежде чем начать, сформулируйте цель базы данных.
Дополнительные сведения
Чтобы спроектировать специализированную базу данных, определите ее назначение и часто обращайтесь к этому определению. Если вам нужна небольшая база данных для домашнего бизнеса, можно дать простое определение, например: «Эта база данных содержит список сведений о клиентах для рассылки и создания отчетов». Для корпоративной базы данных можно дать определение из нескольких абзацев, в котором будет описано, когда и как люди с различными ролями используют базу данных и содержащуюся в ней информацию. Создайте специальное и подробное определение цели и периодически обращайтесь к нему в процессе проектирования.
Шаг 2. Поиск и упорядочение необходимых сведений
Соберите все типы данных, которые необходимо записывать, например названия товаров и номера заказов.
Дополнительные сведения
Начните с существующих сведений и методов отслеживания. Предположим, вы записываете заказы на покупку в книге учета или ведете записи о клиентах в бумажных формах. Используйте эти источники, чтобы создать список собираемых сведений (например, всех полей в формах). Если в настоящее время вы не собираете важные сведения, подумайте, какие дискретные данные вам необходимы. Каждый отдельный тип данных становится полем в вашей базе данных.
Не беспокойтесь, если ваш первый список несовершенен — вы сможете доработать его со временем. Однако всегда помните о людях, которые будут пользоваться этой информацией, и учитывайте их мнение.
Затем подумайте, что вы ждете от своей базы данных и какие отчеты или рассылки вы хотите создавать. Убедитесь, что вы собираете данные, которые отвечают этим целям. Например, если вам нужен отчет о продажах по регионам, вам необходимо собирать данные о продажах на региональном уровне. Попробуйте сделать набросок желаемого отчета, используя фактические данные. Затем составьте список данных, необходимых для создания отчета. Сделайте то же самое для рассылок или других выходных данных, которые нужно получить из базы данных.
Предположим, вы даете клиентам возможность подписаться на периодическую рассылку (или отказаться от нее) и хотите распечатать список подписавшихся пользователей. Вам нужно создать столбец «Отправка почты» в таблице «Клиенты» с допустимыми значениями «Да» и «Нет».
Для тех, кто хочет получать рассылку, вам нужно добавить электронный адрес, что также требует отдельного поля. Если вы хотите использовать соответствующее обращение к получателю (например, «Уважаемый» или «Уважаемая»), добавьте поле «Обращение». Если в письмах вы хотите обращаться к клиентам по имени, добавьте поле «Имя».
Совет: Не забывайте разбивать данные на наименьшие единицы, например имя и фамилию в таблице «Клиенты». Вообще, если вы хотите выполнять сортировку, поиск, вычисления или отчет на основе элемента данных (например, фамилии клиента), следует поместить этот элемент в отдельное поле.
Шаг 3. Разделение данных по таблицам
Разделите элементы данных на основные объекты, например товары, клиенты или заказы. Каждый объект выносится в таблицу.
Дополнительные сведения
После создания списка необходимых сведений определите основные объекты, необходимые для организации данных. Избегайте повторения данных между объектами. Например, предварительный список для базы данных по продажам товаров может выглядеть так:

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

Каждая строка содержит сведения о товаре и его поставщике. Так как у вас может быть несколько продуктов от одного поставщика, имена и адреса поставщиков должны повторяться многократно. Это пустая трата места на диске. Вместо этого зафиксировать сведения о поставщике только один раз в отдельной таблице «Поставщики» и связать ее с таблицей «Товары».
Вторая проблема проектирования возникает тогда, когда нужно изменить сведения о поставщике. Предположим, вам нужно изменить адрес поставщика. А так как адрес указан во многих полях, можно случайно изменить его в одном поле и забыть изменить в других. Эту проблему можно решить, записав адрес поставщика только в одном поле.
Наконец, предположим, у вас есть только один товар, поставляемый компанией Coho Winery, и вы хотите удалить этот товар, но сохранить имя и адрес поставщика. Как удалить запись о товаре, не потеряв сведений о поставщике, с такой структурой базы данных? Это невозможно. Так как каждая запись содержит информацию о товаре вместе с данными о поставщике, их невозможно удалить по отдельности. Чтобы разделить эти сведения, необходимо сделать из одной таблицы две: одну — для сведений о товаре, другую —для сведений о поставщике. И только после этого удаление записи о товаре не будет приводить к удалению сведений о поставщике.
Шаг 4. Превращение элементов данных в столбцы
Определите, какие данные необходимо хранить в каждой таблице. Эти отдельные элементы данных становятся полями в таблице. Например, таблица «Сотрудники» может содержать такие поля, как «Фамилия», «Имя» и «Дата приема на работу».
Дополнительные сведения
После выбора объекта для таблицы базы данных столбцы в ней должны содержать сведения только об этом объекте. Например, таблица по товарам должна содержать сведения только о товарах, а не о поставщиках.
Чтобы определить, какие данные нужно отследить в таблице, используйте ранее созданный список. Например, таблица «Клиенты» может содержать такие поля: «Имя», «Фамилия», «Адрес», «Отправка почты», «Обращение» и «Электронный адрес.» Каждая запись (клиент) в таблице содержит один и тот же набор столбцов, поэтому по каждому клиенту можно хранить одинаковую информацию.
Создайте первый список, а затем просмотрите и уточните его. Не забудьте разбить данные на наименьшие возможные поля. Например, если исходный список имеет адрес в качестве поля, разобьйте его на Адрес, Город, Область и Почтовый индекс или, если ваши клиенты являются глобальными, на еще большее поле. Это, например, позволяет выполнять рассылки в правильном формате или отчет по заказам по штатам.
Доработав столбцы с данными во всех таблицах, вы готовы выбрать первичный ключ для каждой из них.
Шаг 5. Задание первичных ключей
Выберите первичный ключ для каждой таблицы. Первичный ключ, например код товара или код заказа, является уникальным идентификатором каждой записи. Если у вас нет явного уникального идентификатора, его можно создать с помощью Access.
Дополнительные сведения
Вам нужно однозначно определить каждую строку в каждой таблице. Вернемся к примеру с двумя клиентами с одинаковым именем. Так как у них одно и то же имя, им нужно дать уникальный идентификатор.
Поэтому каждая таблица должна содержать столбец (или набор столбцов), который однозначно определяет каждую строку. Это и есть первичный ключ. Он часто является уникальным числом, например кодом сотрудника или порядковым номером Используя первичные ключи, Access быстро связывает данные из нескольких таблиц и сводит их для вас воедино.
Иногда первичный ключ состоит из нескольких полей. Например, в таблице «Сведения о заказе», которая содержит позиции по заказам, первичный ключ может включать два столбца: «Код заказа» и «Код товара». Если в первичном ключе используется несколько столбцов, он также называется составным ключом.

Если у вас уже есть уникальный идентификатор для данных в таблице, например номера товаров, однозначно определяющие каждый продукт в каталоге, используйте его, но только если эти значения соответствуют следующим правилам первичных ключей:
- Идентификатор для каждой записи всегда уникален. Повторяющиеся значения в первичном ключе не допускаются.
- Для каждого элемента всегда существует значение. Каждая запись в таблице должна иметь первичный ключ. Если вы создаете ключ с помощью нескольких столбцов, например «Группа позиций» и «Код позиции», всегда должны присутствовать оба значения.
- Первичный ключ представляет собой неизменное значение. Так как на ключи ссылаются другие таблицы, при любом изменении первичного ключа в одной таблице необходимо изменить его во всех других. Частые изменения повышают риск возникновения ошибок.
Если у вас нет явного идентификатора, то в качестве первичного ключа используйте произвольный уникальный номер. Например, вы можете присвоить каждому заказу уникальный номер, только чтобы идентифицировать его.
Совет: Чтобы создать уникальный номер в качестве первичного ключа, добавьте столбец, используя тип данных «Счетчик». Этот тип данных автоматически присваивает каждой записи уникальное числовое значение. Такой идентификатор не содержит фактических сведений о строке, которую он представляет. Он идеален в качестве первичного ключа, так как в отличие от ключей, содержащих фактические данные о строке (например, номер телефона или имя клиента), числа не изменяются.
Работа с базой данных в приложении: чтение, добавление, редактирование, удаление данных (часть 1)
Object-oriented programming (объектно-ориентированное программирование). Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования
Structured Query Language (язык структурированных запросов). Декларативный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных
Entity Framework. Объектно-ориентированная технология доступа к данным
Pattern. Повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста
Видеолекция
Тему работы с базой данных в приложении будем рассматривать на примере отображения, добавления, редактирования и удаления данных. Для отображения определенных данных система обращается к базе данных, получает ответ, а затем преобразует его в удобный для пользователя вид, который настраивает разработчик. Для работы с базой данных в приложении мы будем использовать Entity Framework, который позволяет работать с базой данных через объектно-ориентированный подход. Он предоставляет ряд существенных преимуществ: вам не нужно беспокоиться о коде доступа к данным, а также знать детали работы СУБД SQL Server и синтаксиса языка структурированных запросов SQL. Вместо этого вы работает с таблицами базы данных как с классами С#, а с полями этих таблиц, как со свойствами классов, используя вместо SQL запросов более удобный подход — LINQ. Entity Framework берет на себя обязанности по преобразованию кода C# в SQL инструкции
Помощь
Вы можете создать базу данных MySQL в разделе ISPmanager Базы данных .

Создавая новую базу данных, вы должны обязательно указать ее имя и опционально создать отдельного пользователя для доступа к ней. Логин и пароль созданного пользователя вам понадобится в дальнейшем для входа в базу данных. Эти учетные данные не должны совпадать с теми, под которыми вы заходите на сервер через ISPmanager – это повысит безопасность.
Так же для повышения безопасности базы данных уберите галочку Удалённый доступ , если в этом нет прямой необходимости. Тогда для того, чтобы зайти в базу данных, пользователю нужно будет сначала зайти на виртуальный сервер, а потом уже подключаться к базе.
UTF8 – наиболее подходящий вариант кодировки для любой базы. Если в базу данных импортируется информация из внешнего источника, то нужно удостовериться, что кодировка передаваемых данных такая же, как и в самой базе данных.

Используйте для работы с базой приложение phpMyAdmin, которое доступно в разделе Базы данных — кнопка Web интерфейс .
Урок #7 — Работа с базой данных. Создание модели
Начиная с данного урока мы приступаем к созданию базы данных и работы с ней. За урок мы создадим отдельное приложение, добавим модель для управления таблицей в БД, а также выполним настройку панели администратора.
Видеоурок
Создание таблиц
Джанго обладает замечательным функционалом по работе с базой данных и табличками в ней. Для создания новых таблиц принято использовать файл «models.py». В файле можно записать как один, так и несколько классов, каждый из которых будет выполнять роль определенной таблицы в базе данных.
Создание полей
Для описания полей внутри таблицы необходимо прописать переменные внутри классов. В каждую переменную устанавливается определенное значение, что соответсвует типу устанавливаемых данных в поле таблицы.
Информацию по поводу полей, а также таблиц в Джанго можно прочитать по этой ссылке .
Язык запросов SQL
При работе с базой данных вам необходимо уметь использовать язык запросов SQL. В Джанго можно не прописывать явно SQL команды, но знать и уметь работать с языком SQL обязательно. Вы можете детально ознакомиться с языком SQL в нашем курсе « Уроки SQL для начинающих ».
Магический метод
При получении объекта из базы данных всегда возвращается ID записи. С такой информацией особо ничего не сделать, поэтому лучше в классе модели дописывать магический метод «__str__». В нём можно указать какое значение будет возвращается при получении объекта из БД.
В методе ниже указано, что будет возвращаться значение из поля «title»:
def __str__(self): return self.title