diff --git a/scripts/table_template.sql b/scripts/table_template.sql new file mode 100644 index 0000000..265e40e --- /dev/null +++ b/scripts/table_template.sql @@ -0,0 +1,86 @@ +-- Version 0.5.5.1 Removed character length restrictions as the docs for POSTGRESQL recommend not specifying a limit. +-- Version 0.6.0.0 Changed the numeric values to integers as Golang doesn't have a native decimal type. + +DROP TABLE IF EXISTS property_value; +DROP TABLE IF EXISTS property; +DROP TABLE IF EXISTS property_data_type; +DROP TABLE IF EXISTS item_component; +DROP TABLE IF EXISTS item; +DROP TABLE IF EXISTS subcategory; +DROP TABLE IF EXISTS category; + +CREATE TABLE property_data_type ( + property_data_type_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + property_data_type CHARACTER VARYING UNIQUE NOT NULL +); + +INSERT INTO property_data_type (property_data_type) VALUES ('Money'); +INSERT INTO property_data_type (property_data_type) VALUES ('Text'); +INSERT INTO property_data_type (property_data_type) VALUES ('DateTime'); +INSERT INTO property_data_type (property_data_type) VALUES ('Number'); + +CREATE TABLE category ( + category_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + category_name CHARACTER VARYING UNIQUE NOT NULL +); + +CREATE TABLE subcategory ( + subcategory_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + subcategory_name CHARACTER VARYING UNIQUE NOT NULL, + category_id INT NOT NULL REFERENCES category(category_id) +); + +CREATE TABLE item ( + item_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + item_name CHARACTER VARYING NOT NULL, + value_cents INT DEFAULT 0, + purchase_cost_cents INT DEFAULT 0, + date_aquired TIMESTAMP WITH TIME ZONE, + description CHARACTER VARYING, + notes CHARACTER VARYING, + sold_for_cents INT DEFAULT 0, + sold_to CHARACTER VARYING, -- Could be a pointer TO a TABLE OF comtacts. + category_id INT NOT NULL REFERENCES category(category_id), + subcategory_id INT REFERENCES subcategory(subcategory_id) +); + +-- Example: property_name of "Author" which maps to property_data_type of "Text". +CREATE TABLE property ( + property_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + property_name CHARACTER varying NOT NULL, + property_type_id INT NOT NULL REFERENCES property_data_type(property_data_type_id), + category_id INT NOT NULL REFERENCES category(category_id), + subcategory_id INT REFERENCES subcategory(subcategory_id) +); + +-- Allows grouping items together, i.e. Alienware Desktop -> CPU, HDDs / SSDs, Motherboard, etc. +CREATE TABLE item_component ( + item_component_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + item_id INT NOT NULL REFERENCES item(item_id), + item_subcomponent_id INT NOT NULL REFERENCES item(item_id) +); + +CREATE TABLE property_value ( + property_value_id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + item_id INT NOT NULL REFERENCES item(item_id), + property_id INT NOT NULL REFERENCES property(property_id), + value CHARACTER VARYING NOT NULL +); + +INSERT INTO category (category_name) VALUES ('Books'); +INSERT INTO category (category_name) VALUES ('Electronics'); +INSERT INTO category (category_name) VALUES ('Appliances'); +INSERT INTO category (category_name) VALUES ('Kitchenware'); + +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('PCIe Cards', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Laptops', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Desktops', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('CPUs', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Hard Drives', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Switches', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Routers', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('CPU Coolers', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('USB Devices', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Oscilloscopes', 2); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Heaters', 3); +INSERT INTO subcategory(subcategory_name, category_id) VALUES ('Eletric Kettles', 4); \ No newline at end of file