48 lines
1.9 KiB
Markdown
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` при импорте игнорируется.
|