-- 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) );