164 lines
3.9 KiB
Plaintext
164 lines
3.9 KiB
Plaintext
// Use DBML to define your database structure
|
|
// Docs: https://dbml.dbdiagram.io/docs
|
|
|
|
Table models {
|
|
id int [pk]
|
|
name varchar [not null, unique]
|
|
strings int [not null, default: 6, note: "ilosc strun"]
|
|
scale int [not null, default: 645, note: "menzura w mm"]
|
|
}
|
|
|
|
Table colors {
|
|
id int [pk]
|
|
name varchar [not null, unique]
|
|
burst bool [not null, default: false, note: "czy ma cien"]
|
|
monolith bool [not null, default: false, note: "czy nie jest transparetny"]
|
|
}
|
|
|
|
Enum finish_type {
|
|
GLOSS
|
|
SATIN
|
|
MAT
|
|
NITRO
|
|
}
|
|
|
|
Enum part_type {
|
|
BODY
|
|
NECK
|
|
}
|
|
|
|
Table parts {
|
|
id int [pk]
|
|
product_id int [ref: > products.id, not null]
|
|
type part_type [not null]
|
|
color_top int [ref: > colors.id, not null]
|
|
color_back int [ref: > colors.id, not null]
|
|
finish_top finish_type [not null]
|
|
finish_back finish_type [not null]
|
|
|
|
indexes {
|
|
(product_id, type) [unique]
|
|
}
|
|
}
|
|
|
|
Table products {
|
|
id int [pk]
|
|
model int [ref: > models.id, not null]
|
|
note text
|
|
}
|
|
|
|
Table detail_products {
|
|
product_id int [pk, ref: - products.id, not null]
|
|
spec jsonb [not null, note: "aktualny snapshot specyfikacji pobranej ze starego systemu"]
|
|
source_url varchar [note: "adres url strony ze specyfikacja ze starego systemu"]
|
|
source_hash varchar [not null, note: "hash aktualnego jsona specyfikacji do wykrywania zmian"]
|
|
last_fetched_at timestamp [not null, note: "czas ostatniego pobrania specyfikacji ze starego systemu"]
|
|
initial_spec_diff jsonb [note: "roznice miedzy aktualna specyfikacja a pierwsza pobrana wersja; null gdy brak zmian lub istnieje tylko pierwsza wersja"]
|
|
}
|
|
|
|
Table detail_product_versions {
|
|
id int [pk]
|
|
product_id int [ref: > products.id, not null]
|
|
version_no int [not null, note: "kolejny numer wersji specyfikacji dla danego produktu; 1 oznacza pierwsza pobrana wersje"]
|
|
spec jsonb [not null, note: "archiwalny snapshot specyfikacji ze starego systemu"]
|
|
source_hash varchar [not null, note: "hash archiwalnej wersji jsona"]
|
|
fetched_at timestamp [not null, note: "czas pobrania tej wersji"]
|
|
|
|
indexes {
|
|
(product_id, fetched_at)
|
|
(product_id, version_no) [unique]
|
|
(product_id, source_hash) [unique]
|
|
}
|
|
}
|
|
|
|
Table clients {
|
|
id int [pk]
|
|
name varchar [not null, note: "Nazwa klienta"]
|
|
country varchar [note: "Kraj klienta"]
|
|
}
|
|
|
|
Table orders {
|
|
id int [pk]
|
|
order_number int [not null, note: "XXXX, eg 0027"]
|
|
order_year int [not null, note: "YYYY, eg 2025"]
|
|
client_id int [ref: > clients.id ,not null]
|
|
indexes {
|
|
(order_number, order_year) [unique]
|
|
}
|
|
}
|
|
|
|
Table order_products {
|
|
id int [pk]
|
|
product_id int [ref: > products.id, not null, unique]
|
|
order_id int [ref: > orders.id, not null]
|
|
product_order_idx int [not null]
|
|
|
|
indexes {
|
|
(order_id, product_order_idx) [unique]
|
|
}
|
|
}
|
|
|
|
Table operations {
|
|
id int [pk]
|
|
operation varchar [not null, unique]
|
|
description text
|
|
}
|
|
|
|
Enum event_kind {
|
|
OPERATION
|
|
NOTE
|
|
}
|
|
|
|
Enum note_type {
|
|
INFO
|
|
ERROR
|
|
}
|
|
|
|
Table event_operations {
|
|
id int [pk]
|
|
event_id int [ref: - events.id, not null, unique]
|
|
operation_id int [ref: > operations.id, not null]
|
|
}
|
|
|
|
Table event_notes {
|
|
id int [pk]
|
|
event_id int [ref: - events.id, not null, unique]
|
|
type note_type [not null]
|
|
note text [not null]
|
|
}
|
|
|
|
Table event_photos {
|
|
id int [pk]
|
|
event_id int [ref: > events.id, not null]
|
|
photo_url varchar [not null]
|
|
description text
|
|
}
|
|
|
|
Table events {
|
|
id int [pk]
|
|
part_id int [ref: > parts.id, not null]
|
|
ordinal int [not null, note: "liczba porzadkowa, wielokrotnosc 32, zeby mozna bylo dodac pomiedzy"]
|
|
kind event_kind [not null, default: "OPERATION"]
|
|
date date [not null, note: "data jest ustawiana po wykonaniu operacji, niekonicznie w ten sam dzien. mozna edytowac"]
|
|
|
|
indexes {
|
|
(part_id, ordinal) [unique]
|
|
}
|
|
}
|
|
|
|
Table production_lists {
|
|
id int [pk]
|
|
name varchar [not null, unique]
|
|
description text
|
|
}
|
|
|
|
Table production_list_products {
|
|
id int [pk]
|
|
product_id int [ref: > products.id, not null]
|
|
prod_list_id int [ref: > production_lists.id, not null]
|
|
|
|
indexes {
|
|
(product_id, prod_list_id) [unique]
|
|
}
|
|
}
|