Files
LabWise/server/src/db/schema.sql

64 lines
1.6 KiB
MySQL
Raw Normal View History

-- Chemical inventory, scoped per user
CREATE TABLE IF NOT EXISTS chemicals (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id TEXT NOT NULL,
-- Required fields
pi_first_name TEXT NOT NULL,
physical_state TEXT NOT NULL,
chemical_name TEXT NOT NULL,
bldg_code TEXT NOT NULL,
lab TEXT NOT NULL,
storage_location TEXT NOT NULL,
storage_device TEXT NOT NULL,
number_of_containers TEXT NOT NULL,
amount_per_container TEXT NOT NULL,
unit_of_measure TEXT NOT NULL,
cas_number TEXT NOT NULL,
-- Optional fields
chemical_formula TEXT,
molecular_weight TEXT,
vendor TEXT,
catalog_number TEXT,
found_in_catalog TEXT,
po_number TEXT,
receipt_date TEXT,
open_date TEXT,
max_on_hand TEXT,
expiration_date DATE,
contact TEXT,
comments TEXT,
permit_number TEXT,
barcode TEXT,
concentration TEXT,
chemical_number TEXT,
lot_number TEXT,
multiple_cas TEXT,
msds TEXT,
percentage_full NUMERIC(5,2),
needs_manual_entry TEXT[],
scanned_image TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS chemicals_user_id_idx ON chemicals(user_id);
CREATE INDEX IF NOT EXISTS chemicals_cas_number_idx ON chemicals(cas_number);
-- Protocols with JSONB analysis results
CREATE TABLE IF NOT EXISTS protocols (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id TEXT NOT NULL,
title TEXT NOT NULL,
content TEXT NOT NULL DEFAULT '',
file_url TEXT,
analysis_results JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS protocols_user_id_idx ON protocols(user_id);