Создание web-сервиса. Всё, но не сразу. Проектирование БД.
Продолжаем серию статей по созданию портала с запчастями. Сегодня мы с Вами спроектируем базу данных. Проектирование базы данных — это фундамент нашего с Вами проекта.
При проектировании Базы данных будем использовать 3 нормальную форму отношения в реляционных базах данных
В нашей базе будет 6 таблиц: User, Company, Product, Category, Attribute и Offer.
Таблицу User мы описывать не будем, так как она создаётся автоматом в Django.
Company
Так как мы планируем, что предложения по товарам будут выкладывать компании (юридические лица). Хранить данные о компании будем в таблице Company, состоящей из следующих столбцов:
- name — название компании, тип Char(2000).
- user — внешний ключ на таблицу User.
- inn — ИНН компании, чтобы инициализировать компанию(будет тип char(10), потому что ИНН может начинаться на 0), уникальное значение.
- address — адрес компании (длинный текст, тип — text, так как адрес может быть длинным).
- phone — телефон для связи, тип — char(12), уникальное значение.
- mail — электронная почта, тип — char(300), уникальное значение.
- logo — в django есть такой тип как ImageField, наследуется от FileField + содержит также height и width.
- Balance — баланс компании, в будущем планируется, что будут введены платные услуги, тип — int(11).
- Date — дата добавления компании в базу. Тип в django DateTimeField.
- Slug — это уникальная строка идентификатор, понятная человеку, будет использоваться autoslug.fields.AutoSlugField. Будет применяться для url. Уникальное значение.
- Active — Число, 0 или 1, которое укажет прошла модерацию фирма или нет.
Product
Таблица, содержащие данные о товарах.
- name — название продукта. Тип столбца Char(2000).
- number — каталожный номер, тип столбца Char(12), уникальное значение.
- slug — см. подобную строку в Company.
- image — так же как и logo в Company.
- Category — внешний ключ к таблице catregory, указывает к какой категории относится продукт.
Category
Таблица, содержащие данные о Категориях.
- name — название категории, char(2000).
- slug — см. подобную строку в Company.
- image — фото категории, тип как у logo в Company.
Attribute
Таблица для атрибутов товаров.
- key — ключ значения атрибута, тип — char(200).
- value — значение ключа атрибута, тип — char(200).
- product — внешний ключ на таблицу Product, чтобы привязать атрибут к Товару.
Offer
Таблица с предложениям по товарам.
- Product — внешний ключ на таблицу Product. По какому товару предложение.
- Company - внешний ключ на таблицу Company, Какая компания сделала предложение по товару.
- Price — цена предложения, тип Int(6).
- active — 0 или 1, указывает прошла ли модерацию предложение.
Данная структура может быть дополнена или изменена. Разработанная структура, на мой взгляд, является наиболее подходящей для этого проекта.
Схематично таблицы и связи выглядят вот так:
https://i.imgur.com/0GfpgN6.jpg
Данный пост подготовлен автором @zheev. В рамках данного цикла статей он расскажет о том, что и как он программировал, какие языки и технологии использовал. С какими трудностями пришлось столкнуться и их решение на реальных примерах.
Заглавное фото с сайта zametkinapolyah.ru