Untitled

 avatar
unknown
plain_text
8 months ago
5.0 kB
4
Indexable
-- Drop tables in reverse order of dependencies to avoid constraint issues
DROP TABLE Body_Measurements CASCADE CONSTRAINTS;
DROP TABLE Progresses CASCADE CONSTRAINTS;
DROP TABLE Member_Sessions CASCADE CONSTRAINTS;
DROP TABLE Sessions CASCADE CONSTRAINTS;
DROP TABLE Offers CASCADE CONSTRAINTS;
DROP TABLE Services CASCADE CONSTRAINTS;
DROP TABLE Memberships CASCADE CONSTRAINTS;
DROP TABLE Subscriptions CASCADE CONSTRAINTS;
DROP TABLE Members CASCADE CONSTRAINTS;
DROP TABLE Trainers CASCADE CONSTRAINTS;
DROP TABLE Administrators CASCADE CONSTRAINTS;
DROP TABLE Users CASCADE CONSTRAINTS;

-- Recreate tables

-- Users table to store common attributes for all user types
CREATE TABLE Users (
    user_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    username VARCHAR2(50) UNIQUE NOT NULL,
    password VARCHAR2(100) NOT NULL,
    full_name VARCHAR2(100) NOT NULL,
    email VARCHAR2(100) UNIQUE NOT NULL,
    contact_number VARCHAR2(15),
    user_type VARCHAR2(15) CHECK (user_type IN ('Administrator', 'Trainer', 'Member')) NOT NULL
);

-- Administrators table (inherits from Users)
CREATE TABLE Administrators (
    user_id NUMBER PRIMARY KEY,
    CONSTRAINT fk_Admin_User FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE
);

-- Trainers table with specialization field
CREATE TABLE Trainers (
    user_id NUMBER PRIMARY KEY,
    specialization VARCHAR2(100),
    CONSTRAINT fk_Trainer_User FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE
);

-- Members table with additional attributes specific to members
CREATE TABLE Members (
    user_id NUMBER PRIMARY KEY,
    current_weight NUMBER,
    target_weight NUMBER,
    fitness_goals VARCHAR2(4000),
    height NUMBER,
    age NUMBER,
    activity_level VARCHAR2(50),
    CONSTRAINT fk_Member_User FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE
);

-- Subscriptions table
CREATE TABLE Subscriptions (
    subscription_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    subscription_name VARCHAR2(100) NOT NULL,
    duration_days NUMBER NOT NULL,
    price NUMBER NOT NULL,
    description VARCHAR2(4000)
);

-- Memberships table, linking members to subscription plans
CREATE TABLE Memberships (
    membership_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    member_id NUMBER NOT NULL,
    subscription_id NUMBER,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    status VARCHAR2(10) DEFAULT 'Active' CHECK (status IN ('Active', 'Expired', 'Cancelled')),
    CONSTRAINT fk_Membership_Member FOREIGN KEY (member_id) REFERENCES Members(user_id) ON DELETE CASCADE,
    CONSTRAINT fk_Membership_Subscription FOREIGN KEY (subscription_id) REFERENCES Subscriptions(subscription_id) ON DELETE SET NULL
);

-- Services table
CREATE TABLE Services (
    service_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    service_name VARCHAR2(100) NOT NULL,
    description VARCHAR2(4000)
);

-- Offers table, linked to specific services
CREATE TABLE Offers (
    offering_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    service_id NUMBER NOT NULL,
    offer_name VARCHAR2(100) NOT NULL,
    description VARCHAR2(4000),
    CONSTRAINT fk_Offer_Service FOREIGN KEY (service_id) REFERENCES Services(service_id) ON DELETE CASCADE
);

-- Sessions table for training sessions with Trainer association
CREATE TABLE Sessions (
    session_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    session_name VARCHAR2(100) NOT NULL,
    trainer_id NUMBER,
    schedule_time TIMESTAMP NOT NULL,
    session_type VARCHAR2(50),
    capacity NUMBER,
    CONSTRAINT fk_Session_Trainer FOREIGN KEY (trainer_id) REFERENCES Trainers(user_id) ON DELETE SET NULL
);

-- Member_Sessions table for many-to-many relationship between Members and Sessions
CREATE TABLE Member_Sessions (
    member_id NUMBER NOT NULL,
    session_id NUMBER NOT NULL,
    PRIMARY KEY (member_id, session_id),
    CONSTRAINT fk_MemberSession_Member FOREIGN KEY (member_id) REFERENCES Members(user_id) ON DELETE CASCADE,
    CONSTRAINT fk_MemberSession_Session FOREIGN KEY (session_id) REFERENCES Sessions(session_id) ON DELETE CASCADE
);

-- Progresses table for tracking member progress
CREATE TABLE Progresses (
    progress_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    member_id NUMBER NOT NULL,
    progress_date DATE NOT NULL,
    notes VARCHAR2(4000),
    CONSTRAINT fk_Progress_Member FOREIGN KEY (member_id) REFERENCES Members(user_id) ON DELETE CASCADE
);

-- Body_Measurements table for storing various measurements associated with progress
CREATE TABLE Body_Measurements (
    measurement_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
    progress_id NUMBER NOT NULL,
    measurement_type VARCHAR2(50) NOT NULL, -- e.g., Chest, Waist, etc.
    measurement_value NUMBER NOT NULL,
    CONSTRAINT fk_BodyMeasurement_Progress FOREIGN KEY (progress_id) REFERENCES Progresses(progress_id) ON DELETE CASCADE
);
Editor is loading...
Leave a Comment