96 lines
3.8 KiB
SQL
96 lines
3.8 KiB
SQL
CREATE TABLE IF NOT EXISTS customers (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS projects (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
customer_id BIGINT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_projects_customer
|
|
FOREIGN KEY (customer_id) REFERENCES customers(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS locations (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
customer_id BIGINT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
kind VARCHAR(64) NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_locations_customer
|
|
FOREIGN KEY (customer_id) REFERENCES customers(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS lots (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
code VARCHAR(255) NOT NULL,
|
|
description TEXT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uniq_lots_code (code)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS assets (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
project_id BIGINT NOT NULL,
|
|
location_id BIGINT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
vendor VARCHAR(255) NULL,
|
|
model VARCHAR(255) NULL,
|
|
vendor_serial VARCHAR(255) NOT NULL,
|
|
asset_tag VARCHAR(255) NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_assets_project
|
|
FOREIGN KEY (project_id) REFERENCES projects(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT fk_assets_location
|
|
FOREIGN KEY (location_id) REFERENCES locations(id)
|
|
ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS components (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
lot_id BIGINT NULL,
|
|
vendor VARCHAR(255) NULL,
|
|
model VARCHAR(255) NULL,
|
|
vendor_serial VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_components_lot
|
|
FOREIGN KEY (lot_id) REFERENCES lots(id)
|
|
ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS installations (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
asset_id BIGINT NOT NULL,
|
|
component_id BIGINT NOT NULL,
|
|
installed_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
removed_at TIMESTAMP NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_installations_asset
|
|
FOREIGN KEY (asset_id) REFERENCES assets(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT fk_installations_component
|
|
FOREIGN KEY (component_id) REFERENCES components(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
CREATE INDEX idx_assets_vendor_serial ON assets(vendor_serial);
|
|
CREATE INDEX idx_components_vendor_serial ON components(vendor_serial);
|
|
CREATE INDEX idx_installations_component_removed ON installations(component_id, removed_at);
|
|
|
|
CREATE INDEX idx_projects_customer ON projects(customer_id);
|
|
CREATE INDEX idx_assets_project ON assets(project_id);
|
|
CREATE INDEX idx_assets_location ON assets(location_id);
|
|
CREATE INDEX idx_components_lot ON components(lot_id);
|