64 lines
1.6 KiB
MySQL
64 lines
1.6 KiB
MySQL
|
|
-- 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);
|