Собрался сделать для удобства себе лично и, возможно, остальным (посмотрим как пойдёт) небольшую систему, которая будет учитывать продажи, приход товара и т.п.
Возможно, кто-то из вас уже разрабатывал нечто подобное, ну, или просто подскажет, как спроектировать базу данных более оптимальным образом.
Картина такая:
Есть несколько министоек, на каждой такой стойке обычно по 2 продавца (продавцов могут перекидывать со стойки на стойку в случае, если нужно подменить кого-то). Каждая такая стойка ежедневно в случае необходимости получает товар. И, соответственно, каждый день что-то продает.
Нужно, чтобы учитывалось:
1. Сколько какого товара на какую стойку пришло.
2. Сколько какого товара на какой стойке продано.
3. Сколько продал конкретный продавец.
В итоге нужно будет по этим данным получать различные отчеты:
1. Сколько какого товара продано определенным продавцом.
2. Сколько какого товара продано на стойке.
3. Сравнительные данные по точкам, товару, проданному на каждой точке и т.д.
Вот какие таблицы я сделал:
1. Здесь хранится информация о количестве конкретного товара на каждой точке.
CREATE TABLE `balance` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`item_id` INT(10) NOT NULL DEFAULT '0',
`place_id` INT(10) NOT NULL DEFAULT '0',
`count` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
2. Здесь хранится информация о категориях товара:
CREATE TABLE `category` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`parent_id` INT(10) NOT NULL DEFAULT '0',
`title` VARCHAR(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
3. Здесь хранится описание товара:
CREATE TABLE `item` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`category_id` INT(10) NOT NULL DEFAULT '0',
`title` VARCHAR(50) NOT NULL DEFAULT '',
`price` SMALLINT(6) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
4. Здесь — учетные записи продавцов:
CREATE TABLE `person` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`login` VARCHAR(50) NOT NULL,
`password` VARCHAR(64) NOT NULL,
`fullname` VARCHAR(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
5. Информация о торговых точка:
CREATE TABLE `place` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=4;
6. Здесь как раз учитывается получение товара продавцом для конкретной точки и продажи товара:
CREATE TABLE `variation` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`person_id` INT(11) NOT NULL DEFAULT '0',
`place_id` INT(11) NOT NULL DEFAULT '0',
`item_id` INT(10) NOT NULL,
`date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`count` INT(11) NOT NULL,
`summ` INT(10) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Мне важна на данный момент сама
структура базы данных. Тип и количество полей изменится, я думаю.
В таблице `variation` поле `place_id` для учета того, на какой точке сколько товара продано продавцом. Т.к. один день продавец может быть тут, другой — там.
Приветствуется любая критика и пожелания (какие книги мне нужно почитать?:) )