# Схема данных ## Таблица `products` | Поле | Тип | Ограничения | Описание | | --- | --- | --- | --- | | `id` | INTEGER | PK, AUTOINCREMENT | внутренний идентификатор | | `designation` | TEXT | NOT NULL, UNIQUE | обозначение по стандарту, например `Болт M10x50 ГОСТ 7798-70` | | `name` | TEXT | NOT NULL | наименование изделия | | `standard` | TEXT | | стандарт: ГОСТ, ISO, DIN и т. п. | | `category` | TEXT | | категория: крепёж, подшипники, ... | | `material` | TEXT | | материал | | `unit` | TEXT | NOT NULL, DEFAULT `шт` | единица измерения | | `mass_kg` | REAL | >= 0 | масса в килограммах | | `attributes` | TEXT (JSON) | NOT NULL, DEFAULT `{}` | произвольные характеристики | | `created_at` | TEXT | NOT NULL | дата создания (UTC) | | `updated_at` | TEXT | NOT NULL | дата обновления (UTC) | Индексы: `standard`, `category`, `material`. ## Идентификация Ключ записи — `designation`. Поэтому импорт работает как upsert: повторный импорт записи с тем же обозначением обновляет её, а не создаёт дубликат. ## JSON-формат импорта/экспорта ```json { "products": [ { "designation": "Болт M10x50 ГОСТ 7798-70", "name": "Болт с шестигранной головкой", "standard": "ГОСТ 7798-70", "category": "Крепёж", "material": "Сталь 20", "unit": "шт", "mass_kg": 0.045, "attributes": {"резьба": "M10"} } ] } ``` Допустим и просто список объектов без обёртки `products`. Поле `id` при импорте игнорируется.