Vertragsverwaltung_Plusfit24/database/schema.sql

86 lines
2.8 KiB
SQL

-- ============================================
-- PlusFit24 Datenbank Schema
-- Auf dem MariaDB Server ausführen
-- ============================================
CREATE DATABASE IF NOT EXISTS plusfit24
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE plusfit24;
-- Kategorien Tabelle
CREATE TABLE IF NOT EXISTS categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO categories (name) VALUES
('Single'),
('Schüler / Studenten / Vereine'),
('Family'),
('Sonstige');
-- Tarife Tabelle
CREATE TABLE IF NOT EXISTS tariffs (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category_id INT,
duration_months INT NOT NULL,
price_monthly DECIMAL(10,2) NOT NULL,
start_package_price DECIMAL(10,2) DEFAULT 35.00,
description TEXT,
active TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
);
INSERT INTO tariffs (name, category_id, duration_months, price_monthly, start_package_price, description) VALUES
('Single 12 Monate', 1, 12, 29.95, 35.00, 'Einzelmitgliedschaft für 12 Monate'),
('Single 24 Monate', 1, 24, 19.95, 35.00, 'Einzelmitgliedschaft für 24 Monate'),
('Schüler - Studenten - Vereine 12 Monate', 2, 12, 28.95, 35.00, 'Ermäßigter Tarif'),
('Family 24 Monate', 3, 24, 49.95, 35.00, 'Familientarif für 24 Monate');
-- Mitgliedschaften Tabelle
CREATE TABLE IF NOT EXISTS memberships (
id INT AUTO_INCREMENT PRIMARY KEY,
tariff_id INT NOT NULL,
salutation VARCHAR(20) NOT NULL,
title VARCHAR(50),
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
birth_date DATE NOT NULL,
email VARCHAR(255) NOT NULL,
phone VARCHAR(50),
street VARCHAR(200) NOT NULL,
address_addition VARCHAR(200),
zip VARCHAR(10) NOT NULL,
city VARCHAR(100) NOT NULL,
bank_name VARCHAR(200),
account_holder VARCHAR(200),
iban VARCHAR(34),
sepa_accepted TINYINT(1) DEFAULT 0,
agb_accepted TINYINT(1) DEFAULT 0,
datenschutz_accepted TINYINT(1) DEFAULT 0,
data_correct TINYINT(1) DEFAULT 0,
guardian_consent TINYINT(1) DEFAULT 0,
is_minor TINYINT(1) DEFAULT 0,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tariff_id) REFERENCES tariffs(id)
);
-- Admin Tabelle
CREATE TABLE IF NOT EXISTS admins (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_memberships_email ON memberships(email);
CREATE INDEX idx_memberships_status ON memberships(status);
CREATE INDEX idx_tariffs_active ON tariffs(active);