Загрузка данных


import sqlite3

# Подключение к БД (файл clinic.db создастся автоматически в текущей папке)
conn = sqlite3.connect('clinic.db')
cursor = conn.cursor()

# Включаем строгую проверку внешних ключей (по умолчанию в SQLite она выключена)
cursor.execute("PRAGMA foreign_keys = ON;")

# 1. Таблица услуг
cursor.execute("""
CREATE TABLE IF NOT EXISTS Service (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT,
    price REAL NOT NULL
);
""")

# 2. Таблица пациентов
cursor.execute("""
CREATE TABLE IF NOT EXISTS Patient (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    birthday TEXT NOT NULL,
    phone TEXT NOT NULL
);
""")

# 3. Таблица врачей
cursor.execute("""
CREATE TABLE IF NOT EXISTS Doctor (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    specialization TEXT NOT NULL
);
""")

# 4. Таблица кабинетов
cursor.execute("""
CREATE TABLE IF NOT EXISTS Cabinet (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    room_number TEXT NOT NULL,
    floor INTEGER NOT NULL,
    room_type TEXT NOT NULL
);
""")

# 5. Центральная таблица записей на прием
cursor.execute("""
CREATE TABLE IF NOT EXISTS Appointment (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    patient_id INTEGER NOT NULL,
    doctor_id INTEGER NOT NULL,
    service_id INTEGER NOT NULL,
    cabinet_id INTEGER NOT NULL,
    datetime TEXT NOT NULL,
    status TEXT NOT NULL,
    complaints TEXT,
    diagnosis TEXT,
    FOREIGN KEY (patient_id) REFERENCES Patient(id) ON DELETE RESTRICT,
    FOREIGN KEY (doctor_id) REFERENCES Doctor(id) ON DELETE RESTRICT,
    FOREIGN KEY (service_id) REFERENCES Service(id) ON DELETE RESTRICT,
    FOREIGN KEY (cabinet_id) REFERENCES Cabinet(id) ON DELETE RESTRICT
);
""")

# 6. Таблица назначений / рецептов
cursor.execute("""
CREATE TABLE IF NOT EXISTS Prescription (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    appointment_id INTEGER NOT NULL,
    medication_name TEXT NOT NULL,
    instructions TEXT,
    FOREIGN KEY (appointment_id) REFERENCES Appointment(id) ON DELETE CASCADE
);
""")

# 7. Таблица оплаты
cursor.execute("""
CREATE TABLE IF NOT EXISTS Payment (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    appointment_id INTEGER NOT NULL,
    sum REAL NOT NULL,
    payment_method TEXT NOT NULL,
    datetime TEXT NOT NULL,
    status TEXT NOT NULL,
    FOREIGN KEY (appointment_id) REFERENCES Appointment(id) ON DELETE CASCADE
);
""")

conn.commit()
print("База данных clinic.db и все таблицы успешно созданы!")