Files
PriceForge/bible-local/schema-baseline-2026-03-21.sql
Mikhail Chusavitin 5f8aec456b Unified Quote Journal (parts_log) v3
- New unified append-only quote log table parts_log replaces three
  separate log tables (stock_log, partnumber_log_competitors, lot_log)
- Migrations 042-049: extend supplier, create parts_log/import_formats/
  ignore_rules, rework qt_lot_metadata composite PK, add lead_time_weeks
  to pricelist_items, backfill data, migrate ignore rules
- New services: PartsLogBackfillService, ImportFormatService,
  UnifiedImportService; new world pricelist type (all supplier types)
- qt_lot_metadata PK changed to (lot_name, pricelist_type); all queries
  now filter WHERE pricelist_type='estimate'
- Fix pre-existing bug: qt_component_usage_stats column names
  quotes_last30d/quotes_last7d (no underscore) — added explicit gorm tags
- Bible: full table inventory, baseline schema snapshot, updated pricelist/
  data-rules/api/history/architecture docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 17:25:54 +03:00

385 lines
18 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Baseline schema: RFQ_LOG database as of 2026-03-21
-- State BEFORE migrations 042049 (parts_log refactor).
-- Server version: 11.8.3-MariaDB-0+deb13u1
--
-- Tables dropped vs. earlier schema (not present here):
-- qt_client_local_migrations — old sync mechanism, removed
-- qt_price_overrides — model existed, feature never implemented
-- qt_users — model existed, auth never implemented in PriceForge
--
-- Tables kept but not referenced in Go code:
-- machine, machine_log — legacy machine quote log, historical data only
CREATE TABLE `lot` (
`lot_name` char(255) NOT NULL COMMENT 'Партномер Нетвелл',
`lot_category` char(255) DEFAULT NULL COMMENT 'Категория компоненты',
`lot_description` varchar(10000) DEFAULT NULL COMMENT 'Длинное описание для спецификаций',
UNIQUE KEY `lot_name` (`lot_name`),
KEY `lot_name_2` (`lot_name`),
KEY `idx_lot_category` (`lot_category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `lot_log` (
`lot_log_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Номер строки (авто)',
`lot` char(255) NOT NULL COMMENT 'Партномер Нетвелл',
`supplier` char(255) NOT NULL COMMENT 'Поставщик',
`date` date NOT NULL COMMENT 'Дата получения цен',
`price` double NOT NULL COMMENT 'Цена',
`quality` char(255) DEFAULT NULL COMMENT 'Качество товара',
`comments` varchar(15000) DEFAULT NULL COMMENT 'Комментарии',
PRIMARY KEY (`lot_log_id`),
UNIQUE KEY `lot_log_id` (`lot_log_id`),
KEY `lot` (`lot`),
KEY `supplier` (`supplier`),
CONSTRAINT `lot_log_ibfk_1` FOREIGN KEY (`lot`) REFERENCES `lot` (`lot_name`),
CONSTRAINT `lot_log_ibfk_2` FOREIGN KEY (`supplier`) REFERENCES `supplier` (`supplier_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `machine` (
`machine_name` char(255) NOT NULL COMMENT 'Модель устройства',
`machine_description` varchar(10000) DEFAULT NULL COMMENT 'Описание',
UNIQUE KEY `machine_name` (`machine_name`),
KEY `machine_name_2` (`machine_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `machine_log` (
`machine_log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'номер строки (авто)',
`date` date NOT NULL DEFAULT current_timestamp() COMMENT 'Дата получения',
`supplier` char(255) NOT NULL COMMENT 'Поставщик',
`country` char(16) DEFAULT NULL,
`opty` char(16) DEFAULT NULL,
`type` char(255) DEFAULT NULL,
`machine` char(255) NOT NULL,
`customer_requirement` char(255) DEFAULT NULL,
`variant` char(255) DEFAULT NULL,
`price_gpl` float DEFAULT NULL,
`price_estimate` float DEFAULT NULL,
`qty` int(11) DEFAULT NULL,
`quality` char(255) DEFAULT NULL,
`carepack` char(255) DEFAULT NULL,
`lead_time_weeks` int(11) DEFAULT NULL,
`prepayment_percent` decimal(10,0) DEFAULT NULL,
`price_got` float NOT NULL,
`Comment` varchar(10000) DEFAULT NULL,
PRIMARY KEY (`machine_log_id`),
KEY `machine_log_id` (`machine_log_id`),
KEY `supplier` (`supplier`),
KEY `machine` (`machine`),
CONSTRAINT `machine_log_ibfk_1` FOREIGN KEY (`machine`) REFERENCES `machine` (`machine_name`),
CONSTRAINT `machine_log_ibfk_2` FOREIGN KEY (`supplier`) REFERENCES `supplier` (`supplier_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `partnumber_log_competitors` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`competitor_id` bigint(20) UNSIGNED NOT NULL,
`partnumber` varchar(255) NOT NULL,
`description` varchar(500) DEFAULT NULL,
`vendor` varchar(255) DEFAULT NULL,
`price` decimal(12,2) NOT NULL,
`price_loccur` decimal(12,2) DEFAULT NULL,
`currency` varchar(10) DEFAULT NULL,
`qty` decimal(12,4) NOT NULL DEFAULT 1.0000,
`date` date NOT NULL,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
KEY `idx_plc_competitor_id` (`competitor_id`),
KEY `idx_plc_competitor_lot_date` (`competitor_id`,`date`),
CONSTRAINT `fk_plc_competitor` FOREIGN KEY (`competitor_id`) REFERENCES `qt_competitors` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_categories` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`name_ru` varchar(100) DEFAULT NULL,
`display_order` bigint(20) DEFAULT 0,
`is_required` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_qt_categories_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_client_schema_state` (
`username` varchar(100) NOT NULL,
`hostname` varchar(255) NOT NULL DEFAULT '',
`last_applied_migration_id` varchar(128) DEFAULT NULL,
`app_version` varchar(64) DEFAULT NULL,
`last_sync_at` datetime DEFAULT NULL,
`last_sync_status` varchar(32) DEFAULT NULL,
`pending_changes_count` int(11) NOT NULL DEFAULT 0,
`pending_errors_count` int(11) NOT NULL DEFAULT 0,
`configurations_count` int(11) NOT NULL DEFAULT 0,
`projects_count` int(11) NOT NULL DEFAULT 0,
`estimate_pricelist_version` varchar(128) DEFAULT NULL,
`warehouse_pricelist_version` varchar(128) DEFAULT NULL,
`competitor_pricelist_version` varchar(128) DEFAULT NULL,
`last_sync_error_code` varchar(128) DEFAULT NULL,
`last_sync_error_text` text DEFAULT NULL,
`last_checked_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`username`,`hostname`),
KEY `idx_qt_client_schema_state_checked` (`last_checked_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_competitors` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`code` varchar(100) NOT NULL,
`delivery_basis` varchar(50) NOT NULL DEFAULT 'DDP',
`currency` varchar(10) NOT NULL DEFAULT 'USD',
`column_mapping` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`column_mapping`)),
`is_active` tinyint(1) NOT NULL DEFAULT 1,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`price_uplift` decimal(8,4) NOT NULL DEFAULT 1.3000 COMMENT 'Price divisor: effective_price = price / price_uplift. Default 1.3.',
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
-- NOTE: column names are quotes_last30d and quotes_last7d (NO underscore before digit).
-- Go model uses explicit gorm:"column:..." tags for these fields.
CREATE TABLE `qt_component_usage_stats` (
`lot_name` varchar(255) NOT NULL,
`quotes_total` bigint(20) DEFAULT 0,
`quotes_last30d` bigint(20) DEFAULT 0,
`quotes_last7d` bigint(20) DEFAULT 0,
`total_quantity` bigint(20) DEFAULT 0,
`total_revenue` decimal(14,2) DEFAULT 0.00,
`trend_direction` enum('up','stable','down') DEFAULT 'stable',
`trend_percent` decimal(5,2) DEFAULT 0.00,
`last_used_at` datetime(3) DEFAULT NULL,
PRIMARY KEY (`lot_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_configurations` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` varchar(36) NOT NULL,
`user_id` bigint(20) UNSIGNED DEFAULT NULL,
`owner_username` varchar(100) NOT NULL DEFAULT '',
`app_version` varchar(64) DEFAULT NULL,
`project_uuid` char(36) DEFAULT NULL,
`name` varchar(200) NOT NULL,
`items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`items`)),
`total_price` decimal(12,2) DEFAULT NULL,
`notes` text DEFAULT NULL,
`is_template` tinyint(1) DEFAULT 0,
`created_at` datetime(3) DEFAULT NULL,
`custom_price` decimal(12,2) DEFAULT NULL,
`server_count` bigint(20) DEFAULT 1,
`server_model` varchar(100) DEFAULT NULL,
`support_code` varchar(20) DEFAULT NULL,
`article` varchar(80) DEFAULT NULL,
`pricelist_id` bigint(20) UNSIGNED DEFAULT NULL,
`warehouse_pricelist_id` bigint(20) UNSIGNED DEFAULT NULL,
`competitor_pricelist_id` bigint(20) UNSIGNED DEFAULT NULL,
`disable_price_refresh` tinyint(1) NOT NULL DEFAULT 0,
`only_in_stock` tinyint(1) NOT NULL DEFAULT 0,
`line_no` int(11) DEFAULT NULL,
`price_updated_at` timestamp NULL DEFAULT NULL,
`vendor_spec` longtext DEFAULT NULL CHECK (json_valid(`vendor_spec`)),
PRIMARY KEY (`id`),
UNIQUE KEY `idx_qt_configurations_uuid` (`uuid`),
KEY `fk_qt_configurations_user` (`user_id`),
KEY `idx_qt_configurations_owner_username` (`owner_username`),
KEY `idx_qt_configurations_project_uuid` (`project_uuid`),
KEY `idx_qt_configurations_pricelist_id` (`pricelist_id`),
KEY `idx_qt_configurations_warehouse_pricelist_id` (`warehouse_pricelist_id`),
KEY `idx_qt_configurations_competitor_pricelist_id` (`competitor_pricelist_id`),
KEY `idx_qt_configurations_project_line_no` (`project_uuid`,`line_no`),
CONSTRAINT `fk_qt_configurations_competitor_pricelist_id` FOREIGN KEY (`competitor_pricelist_id`) REFERENCES `qt_pricelists` (`id`) ON UPDATE CASCADE,
CONSTRAINT `fk_qt_configurations_pricelist_id` FOREIGN KEY (`pricelist_id`) REFERENCES `qt_pricelists` (`id`) ON UPDATE CASCADE,
CONSTRAINT `fk_qt_configurations_project_uuid` FOREIGN KEY (`project_uuid`) REFERENCES `qt_projects` (`uuid`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_qt_configurations_warehouse_pricelist_id` FOREIGN KEY (`warehouse_pricelist_id`) REFERENCES `qt_pricelists` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
-- NOTE: PK is (lot_name) before migration 046; becomes (lot_name, pricelist_type) after.
CREATE TABLE `qt_lot_metadata` (
`lot_name` varchar(255) NOT NULL,
`category_id` bigint(20) UNSIGNED DEFAULT NULL,
`vendor` varchar(50) DEFAULT NULL,
`model` varchar(100) DEFAULT NULL,
`specs` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`specs`)),
`current_price` decimal(12,2) DEFAULT NULL,
`price_method` enum('manual','median','average','weighted_median') DEFAULT 'median',
`price_period_days` bigint(20) DEFAULT 90,
`price_updated_at` datetime(3) DEFAULT NULL,
`request_count` bigint(20) DEFAULT 0,
`last_request_date` date DEFAULT NULL,
`popularity_score` decimal(10,4) DEFAULT 0.0000,
`price_coefficient` decimal(5,2) DEFAULT 0.00,
`manual_price` decimal(12,2) DEFAULT NULL,
`meta_prices` varchar(1000) DEFAULT NULL,
`meta_method` varchar(20) DEFAULT NULL,
`meta_period_days` bigint(20) DEFAULT 90,
`is_hidden` tinyint(1) DEFAULT 0,
PRIMARY KEY (`lot_name`),
KEY `fk_qt_lot_metadata_category` (`category_id`),
CONSTRAINT `fk_qt_lot_metadata_category` FOREIGN KEY (`category_id`) REFERENCES `qt_categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_partnumber_books` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`version` varchar(30) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`created_by` varchar(100) NOT NULL DEFAULT '',
`is_active` tinyint(1) NOT NULL DEFAULT 0,
`partnumbers_json` longtext NOT NULL DEFAULT '[]',
PRIMARY KEY (`id`),
UNIQUE KEY `uq_qt_partnumber_books_version` (`version`),
KEY `idx_qt_partnumber_books_is_active` (`is_active`),
KEY `idx_qt_partnumber_books_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_partnumber_book_items` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`partnumber` varchar(255) NOT NULL,
`lots_json` longtext NOT NULL,
`description` varchar(10000) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_qt_partnumber_book_items_partnumber` (`partnumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_pricelists` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`source` varchar(20) NOT NULL DEFAULT 'estimate',
`version` varchar(20) NOT NULL,
`created_at` datetime(3) DEFAULT NULL,
`created_by` varchar(100) DEFAULT NULL,
`is_active` tinyint(1) DEFAULT 1,
`usage_count` bigint(20) DEFAULT 0,
`expires_at` datetime(3) DEFAULT NULL,
`notification` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_qt_pricelists_source_version` (`source`,`version`),
KEY `idx_qt_pricelists_source_created_at` (`source`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
-- NOTE: gains lead_time_weeks INT NULL in migration 047.
CREATE TABLE `qt_pricelist_items` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`pricelist_id` bigint(20) UNSIGNED NOT NULL,
`lot_name` varchar(255) NOT NULL,
`lot_category` varchar(50) DEFAULT NULL,
`price` decimal(12,2) NOT NULL,
`price_method` varchar(20) DEFAULT NULL,
`price_period_days` bigint(20) DEFAULT 90,
`price_coefficient` decimal(5,2) DEFAULT 0.00,
`manual_price` decimal(12,2) DEFAULT NULL,
`meta_prices` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pricelist_lot` (`pricelist_id`,`lot_name`),
KEY `idx_qt_pricelist_items_category` (`lot_category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_pricelist_sync_status` (
`username` varchar(100) NOT NULL,
`last_sync_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`app_version` varchar(64) DEFAULT NULL,
PRIMARY KEY (`username`),
KEY `idx_qt_pricelist_sync_status_last_sync` (`last_sync_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_pricing_alerts` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`lot_name` varchar(255) NOT NULL,
`alert_type` enum('high_demand_stale_price','price_spike','price_drop','no_recent_quotes','trending_no_price') NOT NULL,
`severity` enum('low','medium','high','critical') DEFAULT 'medium',
`message` text NOT NULL,
`details` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`details`)),
`status` enum('new','acknowledged','resolved','ignored') DEFAULT 'new',
`created_at` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_projects` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` char(36) NOT NULL,
`owner_username` varchar(100) NOT NULL,
`code` varchar(100) NOT NULL,
`variant` varchar(100) NOT NULL DEFAULT '',
`name` varchar(200) DEFAULT NULL,
`tracker_url` varchar(500) DEFAULT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT 1,
`is_system` tinyint(1) NOT NULL DEFAULT 0,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `uuid` (`uuid`),
UNIQUE KEY `idx_qt_projects_code_variant` (`code`,`variant`),
KEY `idx_qt_projects_owner_username` (`owner_username`),
KEY `idx_qt_projects_is_active` (`is_active`),
KEY `idx_qt_projects_is_system` (`is_system`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_scheduler_runs` (
`job_name` varchar(100) NOT NULL,
`last_started_at` datetime DEFAULT NULL,
`last_finished_at` datetime DEFAULT NULL,
`last_status` varchar(20) NOT NULL DEFAULT 'idle',
`last_error` text DEFAULT NULL,
`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`job_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_schema_migrations` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`filename` varchar(255) NOT NULL,
`applied_at` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_qt_schema_migrations_filename` (`filename`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `qt_vendor_partnumber_seen` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`source_type` varchar(32) NOT NULL,
`vendor` varchar(255) NOT NULL DEFAULT '',
`partnumber` varchar(255) NOT NULL,
`description` varchar(10000) DEFAULT NULL,
`last_seen_at` datetime(3) NOT NULL,
`is_ignored` tinyint(1) NOT NULL DEFAULT 0,
`is_pattern` tinyint(1) NOT NULL DEFAULT 0,
`ignored_at` datetime(3) DEFAULT NULL,
`ignored_by` varchar(100) DEFAULT NULL,
`created_at` datetime(3) DEFAULT NULL,
`updated_at` datetime(3) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_qt_vendor_partnumber_seen_partnumber` (`partnumber`),
KEY `idx_qt_vendor_partnumber_seen_vendor_partnumber` (`vendor`,`partnumber`),
KEY `idx_qt_vendor_partnumber_seen_ignored` (`is_ignored`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `stock_ignore_rules` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`target` varchar(20) NOT NULL,
`match_type` varchar(20) NOT NULL,
`pattern` varchar(500) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `uq_stock_ignore_rule` (`target`,`match_type`,`pattern`),
KEY `idx_stock_ignore_target` (`target`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
CREATE TABLE `stock_log` (
`stock_log_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`partnumber` varchar(255) NOT NULL,
`supplier` varchar(255) DEFAULT NULL,
`date` date NOT NULL,
`price` decimal(12,2) NOT NULL,
`quality` varchar(255) DEFAULT NULL,
`comments` text DEFAULT NULL,
`vendor` varchar(255) DEFAULT NULL,
`qty` decimal(14,3) DEFAULT NULL,
PRIMARY KEY (`stock_log_id`),
KEY `idx_stock_log_lot_date` (`partnumber`,`date`),
KEY `idx_stock_log_date` (`date`),
KEY `idx_stock_log_vendor` (`vendor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
-- NOTE: extended in migration 042 with supplier_code, supplier_type, price_uplift, etc.
CREATE TABLE `supplier` (
`supplier_name` char(255) NOT NULL COMMENT 'Название поставщика',
`supplier_comment` varchar(10000) DEFAULT NULL COMMENT 'Примечание',
UNIQUE KEY `supplier_name` (`supplier_name`),
KEY `supplier_name_2` (`supplier_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;