Files

48 lines
1.9 KiB
Markdown

# Схема данных
## Таблица `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` при импорте игнорируется.