diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..b69761a --- /dev/null +++ b/schema.sql @@ -0,0 +1,168 @@ +-- enable foreign key support in sqlite +--PRAGMA foreign_keys = ON; + +-- part manufacturer +CREATE TABLE IF NOT EXISTS manufacturer ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, -- manufacturer (expanded version, without legal form) + nick TEXT, -- manufacturer nickname + partof INTEGER, -- if the manufacturer has been acquired or is part of another + homepage TEXT, -- URL to home page + search TEXT, -- URL to search page + FOREIGN KEY (partof) REFERENCES manufacturer (id) +); + +-- part distributor +CREATE TABLE IF NOT EXISTS distributor ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + homepage TEXT, -- URL to home page + product_page TEXT -- URL to product page (%s is replace by sku) +); + +-- part package +CREATE TABLE IF NOT EXISTS package ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + family TEXT -- if this package it part of a more general package family +); + +-- the part itself +CREATE TABLE IF NOT EXISTS part ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + description TEXT, + manufacturer INTEGER, + family INTEGER, -- if this part is part of a part family + datasheet TEXT, -- URL to datasheet + package INTEGER, + pincount INTEGER, + page TEXT, -- URL to product page + FOREIGN KEY (manufacturer) REFERENCES manufacturer (id), + FOREIGN KEY (family) REFERENCES part (id), + FOREIGN KEY (package) REFERENCES package (id) +); + +-- CAD drawing type +CREATE TABLE IF NOT EXISTS cad ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + extension TEXT +); + +-- part drawing (symbol, footprint, ...) +CREATE TABLE IF NOT EXISTS drawing ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + cad INTEGER NOT NULL, + path TEXT NOT NULL, + option TEXT, + FOREIGN KEY (cad) REFERENCES cad (id) +); + +-- a part at a distributor +CREATE TABLE IF NOT EXISTS distribution ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + part INTEGER NOT NULL, -- the part + distributor INTEGER NOT NULL, -- the part distributor + sku TEXT NOT NULL, -- distributor part number + FOREIGN KEY (part) REFERENCES part (id), + FOREIGN KEY (distributor) REFERENCES distributor (id) +); + +-- part stock at a distributor +CREATE TABLE IF NOT EXISTS stock ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + distribution INTEGER NOT NULL, -- the part + stock INTEGER NOT NULL, + date DATETIME NOT NULL, + FOREIGN KEY (distribution) REFERENCES distribution (id) +); + +-- price currency +CREATE TABLE IF NOT EXISTS currency ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL +); + +-- currency rate +CREATE TABLE IF NOT EXISTS rate ( + origin INTEGER NOT NULL, -- from + destination INTEGER NOT NULL, -- to + rate REAL NOT NULL, -- 1 from = rate to + date DATETIME NOT NULL, -- date of the rate + FOREIGN KEY (origin) REFERENCES currency (id), + FOREIGN KEY (destination) REFERENCES currency (id) +); + +-- part price at a distributor +CREATE TABLE IF NOT EXISTS price ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + distribution INTEGER NOT NULL, -- the part + quantity INTEGER NOT NULL, -- the minimum number of part for this price + price REAL NOT NULL, -- the unit price + currency INTEGER NOT NULL, + date DATETIME NOT NULL, + FOREIGN KEY (distribution) REFERENCES distribution (id), + FOREIGN KEY (currency) REFERENCES currency (id) +); + +-- document types +CREATE TABLE IF NOT EXISTS document ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + type TEXT -- document type +); + +-- part attachments +CREATE TABLE IF NOT EXISTS attachement ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + part INTEGER NOT NULL, -- the part + type INTEGER, -- attachment document type + path TEXT NOT NULL, -- the path to the attachment + priority INTEGER NOT NULL, -- in which place the attachment should be displayed + FOREIGN KEY (part) REFERENCES part (id), + FOREIGN KEY (type) REFERENCES document (id), + UNIQUE (part, priority) +); + +-- property unit +CREATE TABLE IF NOT EXISTS unit ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + symbol TEXT NOT NULL UNIQUE +); + +-- part property +CREATE TABLE IF NOT EXISTS property ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL, -- property name (min V, ...) + unit INTEGER, + FOREIGN KEY (unit) REFERENCES unit (id) +); + +-- property value +CREATE TABLE IF NOT EXISTS poperty_value ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + part INTEGER NOT NULL, -- the part + property INTEGER NOT NULL, + value TEXT, + FOREIGN KEY (part) REFERENCES part (id), + FOREIGN KEY (property) REFERENCES property (id) +); + +-- part location +CREATE TABLE IF NOT EXISTS location ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + name TEXT NOT NULL UNIQUE, + container TEXT -- container type +); + +-- local stock +CREATE TABLE IF NOT EXISTS inventory ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, -- index + part INTEGER NOT NULL, + location INTEGER, + quantity INTEGER NOT NULL, + date DATETIME NOT NULL, -- when the quantity changed + FOREIGN KEY (part) REFERENCES part (id), + FOREIGN KEY (location) REFERENCES location (id) +);