inou/docs/SCHEMA_OLD.sql

126 lines
4.3 KiB
SQL

-- Inou Old Database Schema (DICOM tables)
-- Deprecated: 2025-12-29
-- Migrated to entries table
--------------------------------------------------------------------------------
-- PROFILES (now: dossiers)
--------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS profiles (
guid TEXT PRIMARY KEY,
name TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
--------------------------------------------------------------------------------
-- STUDIES (now: entries with category='imaging', type='study')
--------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS studies (
guid TEXT PRIMARY KEY,
profile_guid TEXT REFERENCES profiles(guid),
study_instance_uid TEXT UNIQUE,
patient_name TEXT,
patient_dob TEXT,
patient_sex TEXT,
patient_age TEXT,
study_date TEXT,
study_time TEXT,
study_desc TEXT,
institution TEXT,
accession_number TEXT,
referring_physician TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_studies_profile ON studies(profile_guid);
--------------------------------------------------------------------------------
-- SERIES (now: entries with category='series', parent_id=study)
--------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS series (
guid TEXT PRIMARY KEY,
study_guid TEXT REFERENCES studies(guid),
series_instance_uid TEXT,
series_number INTEGER,
series_desc TEXT,
modality TEXT,
body_part TEXT,
protocol_name TEXT,
manufacturer TEXT,
model TEXT,
magnetic_field_strength TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(series_instance_uid, series_desc)
);
CREATE INDEX IF NOT EXISTS idx_series_study ON series(study_guid);
--------------------------------------------------------------------------------
-- SLICES (now: entries with category='slice', parent_id=series)
--------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS slices (
guid TEXT PRIMARY KEY,
series_guid TEXT REFERENCES series(guid),
sop_instance_uid TEXT,
instance_number INTEGER, -- maps to: ordinal
slice_location REAL,
slice_thickness REAL,
rows INTEGER,
cols INTEGER,
pixel_spacing_row REAL,
pixel_spacing_col REAL,
bits_allocated INTEGER,
bits_stored INTEGER,
high_bit INTEGER,
pixel_representation INTEGER,
window_center REAL,
window_width REAL,
window_center_2 REAL,
window_width_2 REAL,
rescale_intercept REAL,
rescale_slope REAL,
image_position_x REAL,
image_position_y REAL,
image_position_z REAL,
image_orientation TEXT,
orientation_type TEXT, -- maps to: type (axial/sagittal/coronal)
tr REAL,
te REAL,
ti REAL,
flip_angle REAL,
echo_number INTEGER,
spacing_between_slices REAL,
acquisition_time TEXT,
content_time TEXT,
photometric_interpretation TEXT,
samples_per_pixel INTEGER,
pixel_min INTEGER,
pixel_max INTEGER,
raw_path TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_slices_series ON slices(series_guid);
--------------------------------------------------------------------------------
-- MIGRATION MAPPING
--------------------------------------------------------------------------------
-- studies.guid -> entries.entry_id (hash of guid)
-- studies.profile_guid -> entries.dossier_id
-- studies.study_instance_uid-> entries.value (for dedup)
-- studies.patient_name -> entries.tags
-- studies.* -> entries.data (JSON)
--
-- series.guid -> entries.entry_id
-- series.study_guid -> entries.parent_id
-- series.series_number -> entries.ordinal
-- series.modality -> entries.type
-- series.series_desc -> entries.tags
-- series.* -> entries.data (JSON)
--
-- slices.guid -> entries.entry_id
-- slices.series_guid -> entries.parent_id
-- slices.instance_number -> entries.ordinal (CRITICAL for ordering)
-- slices.orientation_type -> entries.type
-- slices.sop_instance_uid -> entries.value
-- slices.* -> entries.data (JSON)