sql_env / data /databases /models.py
hjerpe's picture
Upload folder using huggingface_hub
5dd1bb4 verified
"""
SQLAlchemy ORM models for the university course management database.
This module defines all tables using SQLAlchemy declarative syntax with proper
relationships and data types.
"""
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import declarative_base, relationship
Base = declarative_base()
class Address(Base):
"""Address information for people."""
__tablename__ = "Addresses"
address_id = Column(Integer, primary_key=True, autoincrement=True)
line_1 = Column(String(255), nullable=False)
line_2 = Column(String(255))
city = Column(String(100))
zip_postcode = Column(String(20))
state_province_county = Column(String(100))
country = Column(String(100))
# Relationships
people_addresses = relationship("PersonAddress", back_populates="address")
class Person(Base):
"""Person information."""
__tablename__ = "People"
person_id = Column(Integer, primary_key=True, autoincrement=True)
first_name = Column(String(100), nullable=False)
middle_name = Column(String(100))
last_name = Column(String(100), nullable=False)
cell_mobile_number = Column(String(20))
email_address = Column(String(255))
login_name = Column(String(100), unique=True)
password = Column(String(255))
# Relationships
people_addresses = relationship("PersonAddress", back_populates="person")
class Student(Base):
"""Student information."""
__tablename__ = "Students"
student_id = Column(Integer, primary_key=True, autoincrement=True)
student_details = Column(String(500))
# Relationships
course_registrations = relationship(
"StudentCourseRegistration", back_populates="student"
)
course_attendance = relationship(
"StudentCourseAttendance", back_populates="student"
)
class Course(Base):
"""Course information."""
__tablename__ = "Courses"
course_id = Column(String(50), primary_key=True)
course_name = Column(String(200), nullable=False)
course_description = Column(String(500))
other_details = Column(String(500))
# Relationships
course_registrations = relationship(
"StudentCourseRegistration", back_populates="course"
)
course_attendance = relationship("StudentCourseAttendance", back_populates="course")
class PersonAddress(Base):
"""Link between people and their addresses with date ranges."""
__tablename__ = "People_Addresses"
person_address_id = Column(Integer, primary_key=True, autoincrement=True)
person_id = Column(Integer, ForeignKey("People.person_id"), nullable=False)
address_id = Column(Integer, ForeignKey("Addresses.address_id"), nullable=False)
date_from = Column(DateTime)
date_to = Column(DateTime)
# Relationships
person = relationship("Person", back_populates="people_addresses")
address = relationship("Address", back_populates="people_addresses")
class StudentCourseRegistration(Base):
"""Student registration for courses."""
__tablename__ = "Student_Course_Registrations"
student_id = Column(Integer, ForeignKey("Students.student_id"), primary_key=True)
course_id = Column(String(50), ForeignKey("Courses.course_id"), primary_key=True)
registration_date = Column(DateTime, default=datetime.utcnow)
# Relationships
student = relationship("Student", back_populates="course_registrations")
course = relationship("Course", back_populates="course_registrations")
class StudentCourseAttendance(Base):
"""Student attendance records for courses."""
__tablename__ = "Student_Course_Attendance"
student_id = Column(Integer, ForeignKey("Students.student_id"), primary_key=True)
course_id = Column(String(50), ForeignKey("Courses.course_id"), primary_key=True)
date_of_attendance = Column(DateTime, primary_key=True)
# Relationships
student = relationship("Student", back_populates="course_attendance")
course = relationship("Course", back_populates="course_attendance")
class Candidate(Base):
"""Candidate information."""
__tablename__ = "Candidates"
candidate_id = Column(Integer, primary_key=True, autoincrement=True)
candidate_details = Column(String(500))
# Relationships
assessments = relationship("CandidateAssessment", back_populates="candidate")
class CandidateAssessment(Base):
"""Assessment records for candidates."""
__tablename__ = "Candidate_Assessments"
candidate_id = Column(
Integer, ForeignKey("Candidates.candidate_id"), primary_key=True
)
qualification = Column(String(200), primary_key=True)
assessment_date = Column(DateTime, primary_key=True)
asessment_outcome_code = Column(String(50))
# Relationships
candidate = relationship("Candidate", back_populates="assessments")