126 lines
4.3 KiB
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)
|