Как составить базу данных для интернет магазина

Время на прочтение
4 мин

Количество просмотров 121K

Продолжение.
Предыдущие части: 1-3, 4-6, 7-9, 10-13
Продолжение. Каскадное удаление данных.

14. Другой пример: база данных интернет-магазина.

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

Система интернет-магазина.

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

  • Отображение товаров
  • Классификация товаров
  • Регистрация клиентов
  • Добавление товаров в корзину покупок
  • Отображение содержимого корзины покупок
  • Оформление заказов посетителями
  • И т.д.
Определяем сущности и отношения.

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

  • Между заказом и товаром существует связь многие-ко-многим. Каждый заказ содержит 1 или более товаров и каждый товар может быть связан с 0, 1 или большим количеством заказов. Связь многие-ко-многим создается с помощью трех таблиц. Две таблицы – источники данных (order — заказ и products — товары) и одна – соединительная (OrderProducts), что вы и можете увидеть на картинке ниже. Обратите внимание на то, что и заказы и товары имеют связь один-ко-многим с соединительной таблицей. Вместе они образуют связь многие-ко-многим между заказами и товарами.
  • Клиенты и заказы имеют связь один-ко-многим. Каждая запись о клиенте может быть связана с множественными записями о заказах (заказами) и наоборот, каждая запись о заказе (конкретный заказ) может быть связана только с одной записью о клиенте.

image
Данная таблица является простым примером. “Настоящая” таблица клиентов, конечно, содержит больше информации (адрес, город и т.д.)

Некоторые замечания о данной модели.

Таблица заказов (order)

Каждая запись таблицы заказов, каждый заказ связан с уникальной записью о клиенте, с уникальным клиентом с помощью внешнего ключа – поля customer_id.

Количество заказов.

Если вы задались вопросом, а можете ли вы добавить, например, поле количества заказов (order_quantity), то ответ – нет. Эти данные могут быть получены из существующих данных. Общее количество товаров в заказе (order_quantity) может быть получено из таблицы OrderProduct. Запрос, который находит количество товаров в заказе может быть легко сформирован с помощью SQL.

Тип платежа.

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

Общая сумма заказа.

Еще одно поле, которое вы можете (а возможно и должны) добавить в таблицу order – это поле для общей суммы заказа. Но вы можете подумать, что эти данные мы можем получить из существующих. Вы ведь можете сложить стоимости всех товаров заказа? Да. И нет. Цена товара – это величина изменяемая. Поэтому когда вы подсчитаете общую стоимость заказа, сложив стоимости каждого его товара, а владелец магазина удвоит стоимость одного из товаров в заказе, то и общие стоимости всех уже выполненных заказов тоже изменятся. Иначе говоря, если высчитывать общую стоимость заказа при просмотре, а цены на товары могут меняться, то при этом самом просмотре истории может возникнуть такая ситуация, когда количество денег, которые вы заплатили за весь заказ, будет меняться. Вот почему лучше высчитывать общую стоимость в момент оформления заказа и хранить ее в таблице order.

Хранение истории цен на товары.

Говоря про историю, можно предположить, что вам может понадобится сохранять и историю цен на каждый товар. В этом случае вы бы могли посмотреть на дату заказа, сделать запрос к таблице price_history (история цен) и получить стоимость товара на дату оформления заказа. В данном случае вам не пришлось бы хранить общую стоимость заказа в таблице order. Я полагаю, что большинство интернет-магазинов сохраняют общую стоимость товаров заказа и не хранят историю цен на эти товары. Но, если говорить про вас, то разработчик вы и вам решать делать это или нет.

Таблица товаров.

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

15. Вывод и дальнейшее чтение.

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

Куда двигаться дальше?

Если вы хотите разработать свою базу данных, то обязательно познакомьтесь с Mysql workbench. Это отличная утилита для создания диаграмм сущность-связь и не только. Я широко использую ее в своей работе разработчика программного обеспечения, даже если в работе не используется РСУБД Mysql.

Другим логичным шагом после прочтения данного руководства будет ознакомление со структурированным языком запросов (SQL). Моделирование баз данных с помощью Mysql workbench или управление ими с помощью Sqlyog – это все здорово, но… если вы действительно хотите понимать как пользоваться базами данных, то SQL – это навык без которого у вас этого не получится. У W3Schools имеются неплохие уроки по SQL, с которых вы можете начать.

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

В чем заключаются преимущества клиентской базы?

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

Грамотное создание клиентской базы для интернет-магазина способствует структуризации всей работы:

  1. Конкурентное преимущество перед другими магазинами вашего сегмента.
  2. Информация о клиентах, что позволяет повысить качество обслуживания. У вас есть даты рождения, номера телефонов и другая личная информация, поэтому вы имеете возможность радовать своих клиентов скидками или подарками в праздничные дни.
  3. Довольные клиенты приведут к вам своих знакомых, а значит, ваша база будет расширяться.
  4. Повышение прибыли за счет клиентской лояльности и новых покупателей.
  5. Вы найдете подход к каждому покупателю, получив минимум сведений о нем.
  6. Четкое разделение обычных и VIP клиентов.
  7. Грамотная организация маркетинговых акций (телефонные обзвоны, СМС-сообщения с интересными предложениями, рассылка на электронную почту).

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

В чем и как вести клиентскую базу

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

Системы CRM

Эта аббревиатура расшифровывается и переводится как система управления взаимоотношениями с клиентами.

Польза CRM-систем

CRM-система поможет автоматизировать и структурировать общение продавца и клиента, обеспечивая:

  • полноценную базу контактов, как для магазина, так и для крупной компании;
  • возможность контролировать качество работы отдела продаж;
  • статистические данные об эффективности разных видов маркетинговых кампаний;
  • повышение процента удержания клиентов до 5-7%.

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

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

Клиентская база в Excel

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

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

Если вы хотите провести создание клиентской базы с нуля посредством Excel, то это, по крайней мере, выгодно. Но есть у электронных таблиц ряд недостатков:

  1. Неудобный в многопользовательском доступе.
  2. Возможность потери информации.
  3. Отсутствие аудита и статистических данных.
  4. Данные просты в копировании, поэтому могут перекочевать к вашим конкурентам.

База клиентов в Excel

Простая и недорогая Access

В Access данные о ваших клиентах более защищены, чем в Excel. Сегодня существуют варианты программы, в которые можно не только загружать данные, но и получить в итоге удобнейшую веб-базу в облаке. Программа входит в пакет Microsoft Office, а работа в ней напоминает работу в Excel, поэтому у сотрудника не возникнет проблем с размещением.

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

Как заполнять и расширять базу данных?

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

Повышение интереса: скидки или купоны за заполнение анкеты

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

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

  1. Имя, фамилия клиента.
  2. Адрес электронной почты.
  3. Номер телефона.
  4. И адрес или же хотя бы регион.

Шаблон анкеты клиента

Шаблон анкеты клиента

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

Ведение групп в социальных сетях

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

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

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

Группа интернет-магазина женской одежды

Посещение выставок, конференций для расширения базы клиентов

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

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

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

Покупка готовой базы

Если вы до сих пор не знали как вести базу клиентов, то покупать готовую категорически не рекомендуем. Успешный магазин или компания никогда не станет продавать полную и качественную базу. С большой долей вероятности после покупки вы столкнете с такими неприятностями:

  1. Большинство указанных клиентов — «мертвые души», которые сменили номера телефонов и другие контакты.
  2. Собранным клиентам неинтересно ваше предложение, что особенно касается узконаправленных продуктов.

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

Готовые базы компаний по отраслям

Трудоустройство сотрудника с собственной базой клиентуры

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

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

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

Сбор потенциальной клиентуры через холодный звонок

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

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

Беседа ведется по такому принципу:

  1. Презентация, но не продажа услуг, которая должна уложиться в те самые 30 секунд.
  2. Далее при малейшей заинтересованности клиента оператор ведет разговор так, чтобы повысить интерес собеседника к продукту.
  3. Всех клиентов, которые не выразили агрессии и немного заинтересовались предложением, вносят в базу клиентов.
  4. По итогам холодных звонков производится статистическое исследование, являющееся бесценным кладезем информации. Вы узнаете, насколько велик пользовательский интерес к вашему продукту.

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

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

Возможно вам также будет интересно:


август
8
, 2016

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

Какие данные нам нужны

Почти всю нужную информацию мы узнали из предыдущей вводной статьи.
Нам нужна таблица товаров, которая содержит стандартный набор:
артикул — он же ключ таблицы (автоинкремент), название, цену (для простоты пусть будет целое число).
Рейтинг или популярность, условимся, что это будет целое число от 1 до 10.
Значения мы проставим в базе руками и фото — название файла с фото товара.
Отдельно будут 2 поля — категория товара и бренд.
Опять-таки для упрощения условимся, что каждый товар может принадлежать только одной категории.
Бренд у товара тоже один.
Бренды и категории вынесем в отдельные таблицы.
В основной таблице с товарами будем хранить только айдишники категорий и брендов.

Чтобы было чуть нагляднее, ниже скриншот из dbForgeStudio — таблица товаров с заполненными данными
Фильтры в интернет-магазине, таблица товаров

Создаем нужные таблицы

Сначала вспомогательные таблицы категорий и брендов.

    create table categories(
        id int(10) unsigned not null auto_increment,
        category varchar(255) not null,
        primary key (id)
    )
    engine = innodb
    auto_increment = 4
    avg_row_length = 5461
    character set utf8
    collate utf8_general_ci;
    create table brands(
        id int(10) unsigned not null auto_increment,
        brand varchar(255) default null,
        primary key (id)
    )
    engine = innodb
    auto_increment = 7
    avg_row_length = 2730
    character set utf8
    collate utf8_general_ci;

Как видим, обе таблицы крайне просты — id и название ккатегории или бренда.
Теперь таблица товаров.

    create table goods(
        id int(10) unsigned not null auto_increment,
        good varchar(255) not null,
        category_id int(10) unsigned not null,
        brand_id int(10) unsigned not null,
        price int(11) unsigned not null,
        rating int(11) unsigned not null default 0,
        photo varchar(255) not null,
        primary key (id),
        index FK_goods_brands_id (brand_id),
        index FK_goods_categories_id (category_id),
        constraint FK_goods_brands_id foreign key (brand_id)
        references brands (id) on delete cascade on update cascade,
        constraint FK_goods_categories_id foreign key (category_id)
        references categories (id) on delete cascade on update cascade
    )
    engine = innodb
    auto_increment = 15
    avg_row_length = 1170
    character set utf8
    collate utf8_general_ci;

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

Заполняем их данными

Пусть у нас будет 3 категории

    INSERT INTO categories VALUES 
        (1, 'Ноутбуки'),
        (2, 'Смартфоны'),
        (3, 'Видеокарты');

6 брендов

    INSERT INTO brands VALUES 
        (1, 'Apple'),
        (2, 'Samsung'),
        (3, 'Acer'),
        (4, 'Lenovo'),
        (5, 'Asus'),
        (6, 'Gigabyte');

и 14 товаров

    INSERT INTO goods VALUES 
        (1, 'Ноутбук Apple MacBook Air', 1, 1, 60000, 8, 'apple_macbook_air.jpg'),
        (2, 'Ноутбук Apple MacBook Pro', 1, 1, 70000, 9, 'apple_macbook_pro.jpg'),
        (3, 'Ноутбук Lenovo IdeaPad', 1, 4, 17000, 5, 'lenovo_idea_pad.jpg'),
        (4, 'Ноутбук Lenovo G5030', 1, 4, 16000, 7, 'lenovo_g5030.jpg'),
        (5, 'Ноутбук Acer Aspire', 1, 3, 21000, 8, 'acer_aspire.jpg'),
        (6, 'Смартфон Samsung Galaxy A7', 2, 2, 30000, 9, 'samsung_galaxy_a7.jpg'),
        (7, 'Смартфон Samsung Galaxy A5', 2, 2, 17000, 8, 'samsung_galaxy_a5.jpg'),
        (8, 'Смартфон Apple iPhone SE', 2, 1, 38000, 10, 'apple_iphone_se.jpg'),
        (9, 'Смартфон Asus Zenfone Laser', 2, 5, 12000, 6, 'asus_zenfone_laser.jpg'),
        (10, 'Смартфон Lenovo A5000', 2, 4, 11000, 3, 'lenovo_a5000.jpg'),
        (11, 'Смартфон Lenovo P90', 2, 4, 16000, 5, 'lenovo_p90.jpg'),
        (12, 'Видеокарта ASUS', 3, 5, 2000, 8, 'asus_video.jpg'),
        (13, 'Видеокарта GIGABYTE GT-740', 3, 6, 6000, 9, 'gigabyte_video_gt740.jpg'),
        (14, 'Видеокарта GIGABYTE GTX-960', 3, 6, 14000, 10, 'gigabyte_video_gtx960.jpg');

Все файлы с картинками найдете в архиве с исходниками, папка goods.

P.S. Исходники пока не выкладываю, они будут после публикации всех уроков этой серии.

Следующий урок про структуру проекта и базовую верстку готовится к публикации.
За обновлениями и выходом следующих статей следите здесь на сайте или в твиттере
@webdevkin15

UPDATED: урок про структуру проекта и верстку опубликован

Все об интернет-магазинах

Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.

Истории из жизни айти и обсуждение кода.

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

Сегодня мы сделаем то же самое, но уже в настоящей базе данных и с таблицами. 

Создаём простые связи в базе данных

Что понадобится

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

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

Таблица с товарами

В таблице с товарами у нас будет три столбца, причём главным будет название товара:

  1. Название ← по этому параметру мы будем связывать эту таблицу с другой.
  2. Количество ← остаток на складе.
  3. Цена.

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

Важная оговорка: мы намеренно делаем связь по названию, а не по id товара или другому служебному полю, как это принято при создании связей. А всё потому, что мы хотим повторить схему связей как на рисунке в начале — чтобы можно было в любой момент посмотреть на схему и понять, что откуда берётся и как что связывается. В боевом проекте мы бы делали связи строго по ID товаров.

Чтобы сделать такую таблицу, откроем консоль MySQL командой mysql -u root и выберем нашу учебную базу thecodeDB командой USE thecodeDB:

Создаём простые связи в базе данных

Появилось сообщение о смене базы данных, значит, можно продолжать

Теперь создадим в базе таблицу с товарами:

CREATE TABLE goods (
product VARCHAR(20) PRIMARY KEY,
count INT,
price INT
);

Создаём простые связи в базе данных

Query OK означает, что запрос выполнился без ошибок

Разберём команду подробнее:

  • CREATE TABLE goods  ← создать таблицу с названием goods;
  • product VARCHAR(20) PRIMARY KEY ← первое поле будет называться product, название товара может состоять из 20 символов, а ещё это поле у нас будет уникальным и мы будем использовать его для связи с другой таблицей;
  • count INT ←  второе поле с названием count, в нём будем хранить количество товаров, а для этого нам понадобится целочисленный тип данных INT.
  • price INT ← поле с названием price, где будет цена за штуку.

Заполняем товары

Сейчас таблица пустая — мы в этом убедимся, выполнив команду SELECT * FROM goods;, что означает «Выбери все записи из таблицы goods»:

Создаём простые связи в базе данных

Заполним таблицу товарами, используя расширенную версию команды INSERT, — в ней нужно явно указать, какое значение в какое поле отправляется:

INSERT INTO goods SET
product = 'стол',
count = 2,
price = 3000;

Создаём простые связи в базе данных

Проверим, добавилась ли запись — выведем всё содержимое таблицы с товарами:

Создаём простые связи в базе данных

Точно так же добавим два остальных товара:

Создаём простые связи в базе данных

Заполняем таблицу с клиентами

Теперь, когда мы знаем, как создавать и заполнять таблицы, сделаем таблицу с клиентами, причем поле «номер телефона» пометим как UNIQUE, потому что номер телефона будет уникальным для каждого покупателя. 

Ещё мы сделаем поле id, где будет храниться код покупателя. Обратите внимание на параметр AUTO INCREMENT — он означает, что при каждом добавлении нового клиента в базу код покупателя будет автоматически увеличиваться на единицу.

CREATE TABLE clients (
name VARCHAR(40),
phone VARCHAR(10) UNIQUE,
id INT AUTO_INCREMENT PRIMARY KEY
);

Заполним таблицу первыми клиентами, при этом id нам указывать не нужно — база сама будет вести нумерацию клиентов:

INSERT INTO clients SET
name = 'Миша',
phone = 9208381096;

INSERT INTO clients SET
name = 'Наташа',
phone = 9307265198;

INSERT INTO clients SET
name = 'Саша',
phone = 9307281096;

Создаём простые связи в базе данных

Cоздаём таблицу с покупками и связываем всё вместе

Сейчас у нас есть две таблицы — с товарами и клиентами. Теперь сделаем самое интересное — создадим третью таблицу с покупками, где используем данные из двух других таблиц.

Чтобы это сделать, нам понадобится параметр FOREIGN KEY, который отвечает за связь главной и зависимой таблицы. Работает он так: 

  1. В новой таблице мы хотим использовать название товара и код клиента.
  2. Эти два поля будут связаны с двумя таблицами — одна с товарами, а другая с клиентами.
  3. Чтобы это сделать, мы создаём два поля, а потом внизу указываем с помощью параметра FOREIGN KEY, из какой таблицы их брать.

Создаём простые связи в базе данных

Сделаем тестовую покупку — добавим в таблицу с заказами запись о том, что Миша купил 2 табурета:

INSERT INTO orders SET
product = 'табурет',
amount = 2,
client_id = 1;

Создаём простые связи в базе данных

Но если мы попробуем добавить в таблицу запись о покупке товара, которого нет в таблице с товарами, база выдаст ошибку. Всё дело в том, что параметр FOREIGN KEY сначала проверит, есть ли указанный товар в таблице с товарами, и если его нет — не даст ничего записать в таблицу:

Создаём простые связи в базе данных

Дивана нет в списке товаров, поэтому запись в таблицу не добавилась

Что дальше

Чтобы посмотреть информацию о клиенте, который сделал заказ, можно использовать команду SELECT * FROM orders, clients WHERE orders.client_id = clients.id;

Распарсим этот запрос: 

SELECT — «выбери», то есть «выведи», «достань»;

* — «всё»;

FROM orders, clients — из таблиц orders и clients;

WHERE — если оно подходит под условие, что…;

orders.client_id = clients.id; — …айдишник клиента в таблице orders совпадает с айдишником клиента в таблице clients.

В ответ на такой запрос база данных выведет все записи из обеих таблиц с заказами и клиентами, где совпадает id клиента:

Создаём простые связи в базе данных

Видно, что табурет купил клиент Миша с номером телефона 9208381096 и порядковым номером 1 в таблице клиентов

SELECT — одна из основных команд в SQL-запросах, и с ней мы будем работать чаще всего. У неё много параметров и возможностей для конструирования запросов, поэтому в следующий раз мы займемся только ей.

Вёрстка:

Кирилл Климентьев

      1. База данных Интернет-магазина: пример проектирования

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

Интернет-магазин
предлагает широкому кругу потребителей
книги по различным разделам: деловая
литература, научная, художественная,
учебная и др., которые, в свою очередь,
делятся на подразделы. Покупатель, зайдя
на сайт магазина, выбирает книги в
корзину заказов, определяет вид доставки
и вид оплаты, после чего заполняет форму
заказа (рис. 7.12). Заказ автоматически
регистрируется на сервере магазина,
данные заказа должны поступить в базу
данных информационной системы магазина.

Рис.
7.12. Форма заказа
Интернет-магазина

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

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

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

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

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

      1. Концептуальное проектирование

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

На
этапе концептуального проектирования
создается неформальная модель, описывающая
взаимоотношения между объектами
предметной области. Для построения
концептуальной модели в настоящее время
широко применяется подход ER-модели,
предложенной Ченом в 1976 г. МодельER(Entity-Relationship– Сущность-Связь) основана на описании
предметной области с помощью графических
диаграмм, включающих небольшое число
разнородных компонентов.ER-модель
дает наглядное представление концептуальных
схем баз данных.Основными понятиямиER-модели являютсясущность,атрибутисвязь.

Для
сущности КНИГА атрибут ISBN-код
книги
является идентификатором
отдельной книги (экземпляра сущности).
АтрибутыРаздел литературы, Название,
Авторы, Цена
описывают свойства
сущности.

Связи
представляютотношениямежду
сущностями. На рис. 7.13 приведен пример
диаграммы связи сущностей ПОКУПАТЕЛЬ
и КНИГА.

Рис.
7.13.
Связи между сущностями

Базовыми
типами связей сущностей являются:
«один-к-одному», «один-ко-многим»,
«многие-ко-многим». При этом вместо
стрелок на диаграмме можно указывать
тип связи.

Связь
«один-к-одному» (1:1) определяет такой
тип связи между сущностями АиВ,
когда каждому экземпляру сущностиАсоответствует один и только один
экземпляр сущностиВи наоборот.
Например, если покупатель в магазине
оплачивает товары только с помощью
одной кредитной карты, то связь между
сущностями ПОКУПАТЕЛЬ и КРЕДИТНАЯ КАРТА
является связью 1:1 (рис. 7.14).

Примечание

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

Атрибут
сущности – это некоторая характеристика
сущности, которая описывает одно из
ее свойств. Атрибут имеет имя и принимает
значение из некоторого множества
значений. Например, у сущности КНИГА
могут быть атрибуты: ISBN-код
книги, Раздел литературы, Название,
Авторы, Цена.
Множество
значений, разрешенных для данного
атрибута, называется его доменом.
Домен может насчитывать лишь несколько
элементов или очень большое число
элементов. Например, для сущности
КНИГА домен атрибута Раздел
литературы

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

Рис.
7.14
Связь «один-к-одному»

Связи
«один-к-одному» на практике встречаются
редко. В нашем примере целесообразно
включить код карты как атрибут сущности
ПОКУПАТЕЛЬ и рассматривать одну эту
сущность.

Связь
«один-ко-многим» (1: М) определяет такой
тип связи между сущностями АиВ,
когда одному экземпляру сущностиАможет соответствовать ноль, один или
несколько экземпляров сущностиВ,
однако каждому экземпляру сущностиВсоответствует только один экземпляр
сущностиА.

Пример
связи «один-ко-многим» – связь между
сущностями ПОКУПАТЕЛЬ и ЗАКАЗ. ПОКУПАТЕЛЬ
может размещать несколько заказов, но
каждый заказ обязательно имеет ПОКУПАТЕЛЯ
и только одного (рис. 7.15).

Рис.
7.15.
Связь «один-ко-многим»

Связи
«один-ко-многим» наиболее широко
распространены.

Связи
«многие-ко-многим» также широко
распространены. К такому типу относится
связь между сущностями ЗАКАЗ и КНИГА.
В одном заказе может фигурировать
несколько различных книг, в то же время
каждая книга может встречаться во многих
заказах (рис. 7.16).

Рис.
7.16.
Связи «многие-ко-многим»

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

Для
сотрудников отдела заказов есть
две сущности: ЗАКАЗ и КНИГА. Как мы
отметили, связь ЗАКАЗ – КНИГА является
связью «многие-ко-многим». При анализе
связи «многие-ко-многим» часто возникает
необходимость ввода новых сущностей.
В нашем примере непонятно, где хранить
такую характеристику какКоличество
заказанных экземпляров
. Это количество
определяется книгой, которых может быть
в заказе несколько, и не может быть
атрибутом сущности ЗАКАЗ. В то же время
количество заказанного товара не может
быть и атрибутом сущности КНИГА, так
как определяется заказом. Выходом из
положения является ввод сущности КОРЗИНА
ЗАКАЗА, которая связывает заказ с
заказанными книгами.

Сущность
ЗАКАЗ имеет атрибуты: Код заказа, Дата
заказа, Покупатель, Телефон, Адрес
электронной почты, Адрес доставки
.
Код заказа является идентифицирующим
отдельный экземпляр сущности (то есть
конкретный заказ) атрибутом.

Сущность
КНИГА имеет атрибуты: ISBN-код
книги, Название, Авторы, Издательство,
Год издания, Цена
.ISBN-код
является международным стандартным
номером книг, который присваивается
каждой книге. Таким образом, он является
естественным идентифицирующим атрибутом.

Сущность
КОРЗИНА ЗАКАЗА имеет атрибуты: Код
заказа,
ISBN-код
книги, Количество экземпляров в заказе
.
Определяющим экземпляр сущности
признаком является совокупность полейКод заказа и ISBN-код
книги
.

Связь
«многие-ко-многим» между сущностями
ЗАКАЗ и КНИГА реализуется в такой схеме
через сущность КОРЗИНА ЗАКАЗА (рис.
7.17). На рисунке помимо названий сущностей
указаны ключевые атрибуты.

Рис.
7.17.
Пользовательское представление
сотрудников отдела заказов

С
точки зрения сотрудников маркетинговой
службы
важным является анализ
потребительского спроса, определение
потребностей и предпочтений покупателей.
Поэтому в представлении маркетолога
ПОКУПАТЕЛЬ рассматривается как отдельная
сущность, ее следует выделить из сущности
ЗАКАЗ, оставив в заказе некоторый
идентифицирующий покупателя атрибут,
например, код покупателя. Атрибутами
сущности ПОКУПАТЕЛЬ являютсяКод
покупателя, Организация, Фамилия, Имя,
Отчество, Телефон, Адрес электронной
почты, Почтовый адрес
. АтрибутОрганизацияопределяет, осуществляет
ли заказ организация или частное лицо.
Это атрибут-признак. Сущность ПОКУПАТЕЛЬ
позволяет исследовать сегмент
потребителей, выявлять постоянных
клиентов и рационально организовать
обратную связь с потребителем. Связь
между сущностями ПОКУПАТЕЛЬ и ЗАКАЗ
представлена на рис. 7.18.

Для
выявления спроса на отдельную продукцию
и группы продукции, а также для
предоставления покупателям возможности
поиска книги по разделу, важно ввести
в описание сущности КНИГА атрибут
Раздел литературы. В этом случае
можно реализовать такие запросы, как
получение информации об объемах и
поступлениях от продаж книг различных
разделов.

Сотрудники
отдела доставки оперируют только с
сущностью ЗАКАЗ. Для них важно обеспечить
своевременное выполнение заказа и
управление работой курьеров. Поэтому
сущность ЗАКАЗ дополняется такими
атрибутами как Дата доставки, Дата
исполнения, Тип доставки, Цена доставки,
Курьер
. Курьеру бывают нужны
дополнительные сведения: ближайшие
станции метро, № маршрутов городского
транспорта, как пройти/проехать,
желательные часы доставки и т. п. Поэтому
целесообразно включить также атрибутПримечание, в котором могут содержаться
такие сведения.

Руководитель
отдела доставки
хотел бы иметь более
полные личные данные по курьерам. Его
представление состоит из двух сущностей:
ЗАКАЗ и КУРЬЕР. Сущность ЗАКАЗ имеет
атрибуты:Код заказа, Дата доставки,
Дата исполнения, Тип доставки, Код
курьера
. Сущность КУРЬЕР определяется
атрибутамиКод курьера, Фамилия, Имя,
Отчество, Дата рождения, Дата приема на
работу, Рабочая смена
. Сущности КУРЬЕР
и ЗАКАЗ связаны соотношением один-ко-многим
(рис. 7.20).

Рис.
7.18
Пользовательское представление
сотрудников отдела маркетинга

Рис.
7.19
Пользовательское представление
сотрудников отдела доставки

С
точки зрения сотрудника бухгалтерииважным является, как именно будет
произведена оплата: наличными курьеру,
кредитной картой, через определенную
платежную систему Интернет. Поэтому
сущность ЗАКАЗ дополняется атрибутомФорма оплаты.

Полная
концептуальная модель базы данных
представляется теперь в виде пяти
сущностей, связанных между собой связями
«один-ко-многим» (рис. 7.20).

Рис.
7.20 Полная концептуальная
модель базы данных Интернет-магазина

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

Таблица 7.1

Словарь
атрибутов концептуальной модели базы
данных Интернет-магазина

Атрибут

Домен

ПОКУПАТЕЛЬ

Код
покупателя

Целое
число, уникальный номер

Организация

Да/Нет

Фамилия

Текст,
не более 30 символов, содержащий фамилии

Имя

Текст,
не более 20 символов, содержащий имена

Отчество

Текст,
не более 20 символов, содержащий
отчества

Телефон

Текст,
не более 15 символов, содержащий 10-ти
значный номер

Адрес
электронной почты

Текст,
не более 30 символов, содержащий символ
@

Почтовый
адрес

Текст,
не более 255 символов

ЗАКАЗ

Код
заказа

Целое
число, уникальный номер

Код
покупателя

Целое
число

Форма
оплаты

Одно
из: наличными курьеру; кредитной
картой; платежную систему CyberPlat ;
платежную систему WebMoney; платежную
систему КредитПилот.

Список
может расширяться

Дата
заказа

Дата

Дата
доставки

Дата

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

Дата

Тип
доставки

Одно
из: курьером по Москве; курьером по
Московской области; курьером по
Санкт-Петербургу; почтой наложенным
платежом; почтой по предоплате.

Список
может расширяться

Цена
доставки

Вещественное
число, денежный формат,

определяется
видом доставки

Код
курьера

Целое
число

Адрес
доставки

Текст,
не более 255 символов

Примечание

Текст,
не более 255 символов

КОРЗИНА
ЗАКАЗА

Код
заказа

Целое
число

ISBN-код
книги

Текст,
не более 25 символов

Количество
экземпляров в заказе

Целое
число, не более 1000

КНИГА

ISBN-код
книги

Текст,
не более 25 символов

Раздел
литературы

Текст,
не более 50 символов

Название

Текст,
не более 255 символов

Авторы

Текст,
не более 255 символов

Издательство

Текст,
не более 50 символов

Год
издания

Целое
число от 2000 до 2100

Цена

Вещественное
число, денежный формат

КУРЬЕР

Код
курьера

Целое
число

Фамилия

Текст,
не более 30 символов

Имя

Текст,
не более 20 символов

Отчество

Текст,
не более 20 символов

Дата
рождения

Дата

Дата
приема на работу

Дата

Рабочая
смена

Одно
из: первая, вторая, обе

Соседние файлы в папке Учебник

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Как найти объем прямоугольного треугольника формула
  • Глиммербрук симс 4 портал как найти
  • Фруктовое желе не застывает как исправить
  • Как в инстаграме найти понравившиеся мне видео
  • Как найти плотность смеси двух жидкостей