Как правильно спроектировать БД прайс-листов ?

Тема в разделе "Базы данных", создана пользователем Chvalov, 16 фев 2018.

Модераторы: latteo
  1. Chvalov

    Chvalov

    Регистр.:
    31 окт 2011
    Сообщения:
    239
    Симпатии:
    76
    Подскажите как правильнее спроектировать базу для работы с прайс листами:
    Сейчас набросал вот такую схему:


    PHP:
    -- Таблица с продуктами
    CREATE TABLE product 
    (
      
    id INT(10UNSIGNED NOT NULL AUTO_INCREMENT,
      
    image VARCHAR(128NULL DEFAULT NULL, -- Todo отдельная таблица для доп картинок
      price DECIMAL
    (13,6NOT NULL COMMENT 'Цена товара',
      
    brand INT(10UNSIGNED NOT NULL,
      
    SKU VARCHAR(64NOT NULL COMMENT 'Артикул товара',
      
    PRIMARY KEY (`id`),
      
    INDEX product_brand_idx (SKU,brand),
      
    CONSTRAINT FK_product_brand_id FOREIGN KEY (`brand`) REFERENCES brands(`id`)
    ENGINE=InnoDB;
    Так-же будет еще таблица supplier__config, для задавания настроек в какой кодировке, с какого рядка, и где нужные данные в каком столбце....

    После заливки прайс листа, будет идти перекалькуляция, буду брать количество и цену с supplier__product и писать в таблицу products

    Правильно ли я все делаю ?
    Товары с главной таблицы products связывать по SKU (supplier__product) ?
    Также придется проходится и искать товары которых нету в products, но появились у поставщиков, добавлять товар привязывать к категории...

    Буду рад любой помощи !
     
  2. Black Hat

    Black Hat

    Регистр.:
    15 май 2015
    Сообщения:
    163
    Симпатии:
    104
    1. Оборачиваем все в транзакцию. Если не меняли уровень изоляции, все таблицы будут в это время доступны для чтения, причем там будут старые значения, вплоть до COMMIT.
    2. Добавляем колонку "дата обновления", DATETIME. Потом делаем так:
    - запоминаем текущую дату, например 2018-02-18 18:26:00
    - добавляем/обновляем данные из прайса, ставя дату обновления "2018-02-18 18:26:00"
    - по завершении делает UPDATE ... WHERE `dateUpdate` <> "2018-02-18 18:26:00"

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