Files
core/migrations/0002_registry/up.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);