Imagesforyou.ru

IMG FOR YOU — ИНТЕРЬЕРНАЯ ФОТОСТУДИЯ
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как создать базу данных

Как создать базу данных?

Как создать базу данных?

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

Разработка учетной системы на полном стеке (fullstack)

Самописные системы разрабатываются на базе полного стека разработки с N слоями:

  • проектируется база данных
  • создается слой доступа к данным
  • создается слой бизнес-логики
  • разрабатывается API или слой контроллеров
  • делается верстка
  • к ней подключается динамика за счет front end программирования.

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

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

Fullstack разработка — это долго, дорого и много ошибок

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

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

Какими преимуществами обладает MySQL?

Одними из главных плюсов MySQL, благодаря которым программа нравится многим веб-мастерам, является высокая скорость обработки информации и функциональность СУБД. Как мы уже упоминали выше, данная система представляет собой программное обеспечение с открытым кодом, и она доступна любому пользователю абсолютно бесплатно, что тоже склоняет чашу весов в сторону MySQL. Большинство современных хостингов используют именно MySQL.

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

SQL – язык запросов, предназначенный для организации управления реляционными БД (со связанными между собой данными). Он многофункционален и с его помощью можно корректировать, создавать и убирать данные из таблиц, запрашивать из них информацию, создавать сами таблицы и т.д.

На заметку! В интернет-пространстве MySQL еще известна как «мускул». Такое название ей придумали веб-мастера. К примеру, когда говорят фразу «CMS на мускуле», это значит, что система управления контентом сайта (движок) применяет СУБД MySQL.

Что такое PHP?

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

Проще говоря, PHP — это язык программирования, специально разработанный для написания web-приложений (сценариев) (читай сайтов в нашем случае), исполняющихся на Web-сервере.

Т.е. web-страница формируется на сервере и отдается посетителю в уже готовом виде. Например мой сайт http://www.LuksWeb.ru/ использует в своей работе именно связку PHP и MySQL. Подробнее про PHP и MySQL мы поговорим в следующих уроках и статьях.

А сегодня у нас конкретная задача: Научиться создавать Базы Данных на Локальном сервере (Денвере) для web-приложений использующих связку PHP и MySQL. Например для скрипта форума или для сайта, на базе готового движка например DLE.

Любой скрипт работающий с Базами Данных, обязательно «спросит» у Вас при установке, три основных параметра:

Этим мы сейчас и займемся.

Создание таблиц

Для создания таблицы сделайте правый клик на пункте «Таблицы» и выберите: Создать объект «таблица».

Появится окно описания таблицы. В таблице необходимо создать необходимые поля (колонки) и добавить первичный ключ (ограничения).

Для добавления полей сделайте правый клик на колонке и выберите: Создать объект «Колонка».

Заполните описание поля

После ввода всех полей нужно добавить первичный ключ. Нажмите на вкладку «Ограничения», сделайте правый клик и выберите: Создать объект «Ограничение».

Читайте так же:
Видеорегистратор neoline wide s55 отзывы владельцев

Создание базы данных через phpMyAdmin

Для создания базы данных можно использовать панель управления хостингом, если вы создаете базу данных на хостинге, или phpMyAdmin, если вы создаете БД на локальном компьютере. Рассмотрим второй вариант.

Первым делом запускаем программу Denwer (виртуальный сервер). Далее переходим по адресу http://localhost/Tools/phpMyAdmin и в открывшемся окне начинаем создавать новую базу данных. Для этого заполняем поля как показано на картинке.

Создание новой базы данных через phpMyAdmin

  • Имя базы данных – прописываем английскими буквами имя нашей базы данных.
  • Сравнение – указываем сравнение для нашей БД. Если кодировка сайта UTF-8 – указываем utf8_general_ci. Если же сайт работает с кодировкой CP 1251 – ставим cp1251_general_ci.

После введения всех данных сохраняем результат и создаем новую БД. В результате этого слева в меню phpMyAdmin появится еще одна база данных с нашим именем.

Меню phpMyAdmin

Создание таблиц в базе данных через phpMyAdmin. Добавление информации в БД через phpMyAdmin

Для того чтобы вручную создать таблицы в базе данных переходим в phpMyAdmin и слева в меню выбираем нашу БД. После этого ищем на странице поле «Создать новую таблицу в БД» и заполняем данные как показано на изображении.

Создание новой таблицы БД через phpMyAdmin

  • Имя – указываем имя таблицы базы данных.
  • Поля – указываем количество полей в создаваемой таблице базы данных.

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

Настройка полей таблицы БД через phpMyAdmin - Фото 1

  • Поле – даем имя нашим полям.
  • Тип – указываем тип данных, которые будут храниться в выбранном поле. Более подробную информацию о типах данных вы можете найти в интернете, воспользовавшись поиском по запросу «Типы данных MySQL».
  • Длины/Значения – указываем длину будущего поля. Например, если выбран тип VARCHAR, который может хранить до 255 знаков, то в данном поле нужно будет указать длину поля в пределах от 0 до 255 символов. В нашем случае для имени и фамилии, на мой взгляд, вполне будет достаточно 100 символов.
  • Сравнение – выбираем сравнение для поля. Обычно, выбирается тип сравнения, который отвечает кодировке базы данных.

Настройка полей таблицы БД через phpMyAdmin - Фото 2

Дополнительно – можно указать дополнительные свойства. В нашем случае для поля id можно выбрать свойство auto_increment, которое отвечает за автоматическое изменение счетчика. Также для поля ставим переключатель в положение «Первичный ключ», которое говорит о том, что в данном поле значения не могут повторяться.

Остальные поля можно оставить как есть по умолчанию.

После внесения всех данных сохраняем результат и создаем новые поля. Теперь при выборе таблицы слева в меню phpMyAdmin у нас откроется вкладка «Структура» в которой мы можем просмотреть всю информацию по созданным полям.

Если вы по каким-то причинам хотите добавить еще поля в эту таблицу, то для этого выбираем нужную нам таблицу слева в меню phpMyAdmin и в открывшемся окне ищем следующие поля.

Добавление новых полей в таблицу БД через phpMyAdmin

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

Ручное добавления информации в базу данных через phpMyAdmin

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

Добавление данных в таблицу БД через phpMyAdmin

В поле «Значения» вносим информацию, которую мы хотим добавить в базу данных. В нашем случае это имя и фамилия. Поле id оставляется пустым, так как данное поле заполняется автоматически (свойство auto_increment). После внесения всей необходимой информации не забываем сохранить результат.

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

Читайте так же:
Видео с веб камер подростков

Таблица с данными в phpMyAdmin

Итак, мы рассмотрели процесс создания базы данных и таблиц баз данных, а также научились добавлять информацию в БД через phpMyAdmin. Теперь давайте перейдем к заключительной части статьи и рассмотрим, как подключиться к созданной базе данных через php, а также рассмотрим php инструкцию INCLUDE, которая позволяет подключать к документу другие файлы.

Подключение к базе данных через PHP. Инструкция INCLUDE

Для того чтобы подключиться к базе данных через PHP нужно сделать следующее.

  1. Подключиться к MySQL серверу и получить специальный идентификатор.
  2. Выбрать базу данных с которой мы хотим работать.

Для того чтобы подключиться к серверу MySQL в PHP есть специальная функция mysql_connect(), которая имеет следующий синтаксис.

Данная функция возвращает результат, который можно поместить в какую-то переменную для дальнейшего использования.

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

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

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

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

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

В кавычках прописываем путь к подключаемому файлу. Теперь, когда обработчик PHP дойдет до этого кода, он на месте include (‘/code/config.php’); вставит содержимое файла config.php. Таким образом, можно подключать к основному файлу другие, например, подключать блоки отвечающие за шапку сайта, sidebar, footer и т.д.

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

Записки программиста

Время от времени я заглядываю на Toster.ru и иногда даже отвечаю там на вопросы. Чаще всего люди спрашивают две вещи — как стать программистом и как правильно спроектировать схему базы данных. Мне лично кажется очень странным, что так много людей задают последний вопрос. Мне почему-то всегда казалось, что это такая простая вещь, которую умеют вообще все. Но, раз так много людей интересуются, здесь я постараюсь дать достаточно развернутый и в то же время краткий ответ.

Я предполагаю, что SQL вы знаете. То есть, объяснять, что такое таблицы, строки, индексы, первичные ключи и ссылочная целостность, не требуется. Если это не так, боюсь, я вынужден отправить вас к соответствующей литературе. Благо, ее сейчас очень много.

Рисуем диаграмму

Допустим, требуется спроектировать схему базы данных, в которой хранится информация о музыкальных исполнителях, альбомах и песнях. На начальном этапе, когда у нас еще совсем ничего нет, удобно начать с рисования диаграммы будущей схемы. Можно начать с наброска ручкой на листе бумаги, можно сразу взять специализированный редактор. Их сейчас очень много, все они устроены довольно похожим образом. При подготовке этой заметки я воспользовался DbSchema. Это платная программа, но мне кажется, что она стоит своих денег. К тому же, в нормальных компаниях обычно оплачивают стоимость софта, необходимого для работы. Триал у DbSchema, если что, составляет две недели.

Читайте так же:
Битрикс элемент не найден

Нарисовать следюущую диаграмму заняло у меня порядко десяти минут:

Пример схемы базы данных

Если раньше вам не доводилось работать с такими диаграммами, не пугайтесь, тут все просто. Прямоугольнички — это таблицы, строки в прямоугольничках — имена столбцов, стрелочками обозначаются внешние ключи, а ключиками — первичные ключи. При желании тут можно разглядеть даже индексы, типы столбцов и обязательность их заполнения (null / not null), но для нас сейчас это не так важно.

Дополнение: Аналогичную диаграмму можно построить при помощи открытого инструмента PlantUML.

Генерируем SQL и скармливаем его СУБД

Нетрудно заметить, что данная диаграмма легко отображается в код для создания схемы базы данных на языке SQL. В DbSchema сгенерировать SQL можно, сказав Schema → Generate Schema and Data Script. Затем полученный скрипт можно скормить используемой вами СУБД:

Я использовал PostgreSQL. Информацию о том, как установить эту СУБД, вы найдете в этой заметке.

Итак, чем же я руководствовался при проектировании схемы?

Нормальные формы

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

Грубо говоря, таблица находится в первой нормальной форме (1НФ), если на пересечении любой строки и любого столбца в таблице находится ровно одно значение. В современных РСУБД это условие всегда выполняется. Даже если СУБД поддерживает множества или массивы, на пересечении строки и столбца хранится ровно одно значение типа множество или массив. Но в таблице (user varchar(100), phone integer) не может быть строки alex — 1234, 5678 . В 1НФ может быть только две сроки — alex — 1234 и alex — 5678 .

Вторая нормальная форма (2НФ) означает, что таблица находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от значения первичного ключа. Неприводимость означает следующее. Если первичный ключ состоит из одного атрибута, то любая функциональная зависимость от него неприводима. Если первичный ключ является составным, то в таблице не может быть атрибута, значение которого однозначно определяется значением подмножества атрибутов первичного ключа.

Таблица находится в третьей нормальной форме, если она находится в 2НФ и ни один неключевой атрибут не находится в транзитивной функциональной зависимости от первичного ключа. Например, рассмотрим таблицу (employee varchar(100) primary key, department varchar(100), department_phone integer) . Очевидно, что она находится в 2НФ. Но телефон отдела находится в транзитивной функциональной зависимости от имени сотрудника, так как сотрудник однозначно задает отдел, а отдел однозначно задает телефон отдела. Для приведения таблицы в 3НФ нужно разбить ее на две таблицы — employee — department и departmnet — phone .

Легко видеть, что нормализация уменьшает избыточность базы данных и препятствует внесению случайных ошибок. Например, если оставить таблицу из последнего примера в 2НФ, то можно по ошибке прописать одному и тому же отделу разные телефоны. Или рассмотрим компанию с пятью отделами и 1000 сотрудниками. Если у отдела поменялся номер телефона, то для его обновления в базе данных в случае 2НФ потребуется просканировать 1000 строк, а в случае с 3НФ только пять.

Как я уже отмечал, есть и более строгие нормальные формы, но на практике обычно используются только первые три.

Отношение один ко многим

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

Читайте так же:
Видео смотрикома в контакте

Для моделирования такого типа отношения в каждом альбоме указывается id исполнителя, и в каждом исполнителе указывается id страны. Понятное дело, мы не просто пишем туда какую-то циферку, а возлагаем ответственность по контролю ссылочной целостности на нашу СУБД:

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

Жанры и страны в приведенной схеме иногда еще называют «словарями». Это сравнительно небольшие таблицы, состоящие из двух столбцов — id и названия. Если, например, мы захотим переименовать страну Russia в Russian Federation, нам придется поменять всего лишь одну строчку в таблице countries, а не править кучу строк в таблице artists, что может привести к очень большому количеству дисковых операций. Кроме того, если требуется отобразить в диалоге создания нового исполнителя выпадающий список с выбором страны, нам не придется делать дорогих группировок по таблице artists, достаточно сделать простую выборку из countries.

Отношение многие ко многим

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

Оно моделируется путем введения дополнительной таблицы. В нашем примере эта таблица называется albums_songs. Первичный ключ в этой таблицы состоит из двух внешних ключей — album_id и song_id. Теперь нетрудно с помощью пары join’ов получить все песни, входящие в данный альбом или все альбомы, в которые входит заданная песня. Кроме того, ничто не мешает завести в связующей таблице дополнительные столбцы. Например, столбец, хранящий номер трека, под которым песня входит в заданный альбом.

На практике связаны могут быть не две, а три и более таблиц. Например, некий пользователь сделал некий заказ, выбрав указанный способ оплаты, адрес и способ доставки — пожалуйста, пять таблиц как с куста.

Отношение родитель-потомок (или общее-частное)

Исполнители могут быть разных типов. Это может быть отдельно взятый(ая) певец/певица, или же группа. У всех исполнителей, независимо от конкретного типа, есть что-то общее. Например, страна, адрес официального сайта и так далее. Но кроме того, есть некоторые свойства, характерные только для данного типа. У певицы явно нет никакого названия группы, а у группы нет имени, фамилии и пола. Аналогичная ситуация возникает, скажем, если у вас есть сотрудники, занимающие различные должности и свойства сотрудников зависят от занимаемых должностей.

Один из способов моделирования такой ситуации заключается в введении по отдельной таблице на каждый из возможных подтипов. В приведенном примере это таблицы groups и persons. В качестве первичного ключа в каждой из этих таблиц используется artist_id, первичный ключ родительской таблицы artists. Кто-то при использовании такой схемы предпочитает добавить в родительскую таблицу столбец type, но, строго говоря, он является избыточным. Недостаток этого метода заключается в том, что можно создать исполнителя, являющегося как группой, так и человеком одновременно.

Есть и другие подходы. В PostgreSQL, например, есть наследование таблиц, предназначенное для решения как раз такой вот проблемы. Если вы работаете с PostgreSQL, нет причин не использовать этот механизм. Кто-то предпочитает ввести одну таблицу для всех типов с дополнительным столбцом type. Если некий столбец не имеет смысла для заданного типа, в него пишется null. Но это, как вы можете подозревать, не очень-то удобно, если у вас 10 типов, каждый из которых имеет по дюжине столбцов, характерных только для этого типа, а также парочку собственных подтипов. Кроме того, можно опрометчиво реализовать смену типа, как простое обновление столбца type, и получить массу интереснейших эффектов.

Читайте так же:
Битрикс единица измерения товара

Что еще нужно принять во внимание

Принцип при моделировании других отношений тот же. Например, один человек имеет двух родителей и при этом один человек может иметь сколько угодно детей. Казалось бы, связь 2:N, этого мы не проходили. На самом деле, это просто две связи 1:N. Вводим столбцы mother_id, father_id и вперед. Да, связь в рамках одной таблицы, ну и что?

Иногда на практике можно столкнутся с древовидными структурами. На самом деле, это то же самое отношение один ко многим, один родитель имеет много потомков. В общем, вводится столбец parent_id, куда пишется «внешний» первичный ключ из этой же таблицы. В корневом элементе устанавливается parent_id равный null. Главное при работе с этим хозяйством — не наплодить случайно циклов.

В общем, все, что нужно, это немного здравого смысла.

Также при проектировании схемы базы данных нужно уделять внимание индексам. Тут все сильно зависит от конкретной СУБД, поддерживает ли она составные индексы, частичные индексы, функциональные индексы, bitmap scans и так далее. Кое-что по этой теме я писал здесь, а вообще — курите мануалы по вашей СУБД. Также за кадром остались вьюхи, тригеры и многое другое.

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

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

Заключение

Все приходит с опытом. Самостоятельно спроектируйте две-три схемы, и картинка сама сложится у вас в голове. В качестве ДЗ можете спроектировать базу данных блога, интернет-магазина или базу с сотрудниками компании, их должностями и контактами. Отталкивайтесь от задачи. Учитывайте, кто и какие действия будет совершать с базой данных. Например, с базой интернет-магазина работают не только клиенты, но и, например, отдел доставки.

Проект для DbSchema, а также сгенерированный из него SQL, вы можете скачать здесь. Как всегда, если у вас есть вопросы или дополнения, не стесняйтесь писать их в комментариях.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector