From 4c57d748ed26f6f659a410c92646894a7bcd7035 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Thu, 24 Sep 2026 14:22:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 +++ model/class_model.py | 18 +++++----- model/code_value_model.py | 16 ++++----- model/company_model.py | 20 +++++------ model/course_model.py | 14 ++++---- model/employee_model.py | 26 +++++++-------- model/employment_info_model.py | 18 +++++----- model/grade_model.py | 16 ++++----- model/interview_model.py | 20 +++++------ model/relation_model.py | 14 ++++---- model/student_model.py | 42 ++++++++++++------------ 沃林数智学生管理系统数据库表的设计.xlsx | Bin 0 -> 19038 bytes 12 files changed, 106 insertions(+), 102 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 沃林数智学生管理系统数据库表的设计.xlsx diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4b5a294 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "python-envs.defaultEnvManager": "ms-python.python:conda", + "python-envs.defaultPackageManager": "ms-python.python:conda" +} \ No newline at end of file diff --git a/model/class_model.py b/model/class_model.py index 9b942b0..07039a6 100644 --- a/model/class_model.py +++ b/model/class_model.py @@ -8,12 +8,12 @@ class Class(Base): __tablename__ = "wl_class" - id = Column(Integer, primary_key=True, autoincrement=True) - class_number = Column(String(50)) - name = Column(String(100)) - start_date = Column(DateTime) - planned_end_date = Column(DateTime) - actual_end_date = Column(DateTime) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + class_number = Column(String(50), comment="班级编号") + name = Column(String(100), comment="班级名字") + start_date = Column(DateTime, comment="开班时间") + planned_end_date = Column(DateTime, comment="计划结课时间") + actual_end_date = Column(DateTime, comment="实际结课时间") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/code_value_model.py b/model/code_value_model.py index ff79bb7..8e67aa5 100644 --- a/model/code_value_model.py +++ b/model/code_value_model.py @@ -8,11 +8,11 @@ class CodeValue(Base): __tablename__ = "wl_code_value" - id = Column(Integer, primary_key=True, autoincrement=True) - code = Column(String(50)) - meaning = Column(String(200)) - type = Column(String(100)) - is_enabled = Column(Boolean) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + code = Column(String(50), comment="编码") + meaning = Column(String(200), comment="意义") + type = Column(String(100), comment="类型") + is_enabled = Column(Boolean, comment="状态(是否可用)") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/company_model.py b/model/company_model.py index 0fce4fc..35fb880 100644 --- a/model/company_model.py +++ b/model/company_model.py @@ -8,13 +8,13 @@ class Company(Base): __tablename__ = "wl_company" - id = Column(Integer, primary_key=True, autoincrement=True) - company_number = Column(String(50)) - name = Column(String(200)) - industry = Column(String(100)) - employee_scale = Column(String(50)) - main_business = Column(String(1000)) - registered_capital = Column(Numeric(16, 2)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + company_number = Column(String(50), comment="企业编号") + name = Column(String(200), comment="企业名称") + industry = Column(String(100), comment="所属行业") + employee_scale = Column(String(50), comment="人员规模") + main_business = Column(String(1000), comment="主营业务") + registered_capital = Column(Numeric(16, 2), comment="注册资金") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/course_model.py b/model/course_model.py index ae938c6..a1fc42a 100644 --- a/model/course_model.py +++ b/model/course_model.py @@ -8,10 +8,10 @@ class Course(Base): __tablename__ = "wl_course" - id = Column(Integer, primary_key=True, autoincrement=True) - course_number = Column(String(50)) - name = Column(String(100)) - planned_training_hours = Column(Numeric(8, 2)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + course_number = Column(String(50), comment="课程编号") + name = Column(String(100), comment="课程名字") + planned_training_hours = Column(Numeric(8, 2), comment="计划培训课时") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/employee_model.py b/model/employee_model.py index b8a14b7..327448b 100644 --- a/model/employee_model.py +++ b/model/employee_model.py @@ -8,16 +8,16 @@ class Employee(Base): __tablename__ = "wl_employee" - id = Column(Integer, primary_key=True, autoincrement=True) - employee_number = Column(String(50)) - name = Column(String(100)) - gender = Column(String(20)) - birth_date = Column(Date) - id_card_number = Column(String(18)) - hometown = Column(String(100)) - salary = Column(Numeric(12, 2)) - position_type = Column(String(50)) - position_level = Column(String(50)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + employee_number = Column(String(50), comment="工号") + name = Column(String(100), comment="姓名") + gender = Column(String(20), comment="性别") + birth_date = Column(Date, comment="生日") + id_card_number = Column(String(18), comment="身份证号") + hometown = Column(String(100), comment="籍贯") + salary = Column(Numeric(12, 2), comment="薪资") + position_type = Column(String(50), comment="岗位类型") + position_level = Column(String(50), comment="岗位级别") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/employment_info_model.py b/model/employment_info_model.py index 107a212..562d491 100644 --- a/model/employment_info_model.py +++ b/model/employment_info_model.py @@ -8,12 +8,12 @@ class EmploymentInfo(Base): __tablename__ = "wl_employment_info" - id = Column(Integer, primary_key=True, autoincrement=True) - student_id = Column(Integer) - employment_salary = Column(Numeric(12, 2)) - company_number = Column(String(50)) - resume_opened_at = Column(DateTime) - offer_received_at = Column(DateTime) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + student_id = Column(Integer, comment="学生id") + employment_salary = Column(Numeric(12, 2), comment="就业薪资") + company_number = Column(String(50), comment="就业的企业编号") + resume_opened_at = Column(DateTime, comment="简历开放时间") + offer_received_at = Column(DateTime, comment="拿到offer时间") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/grade_model.py b/model/grade_model.py index 0b4599e..709b28d 100644 --- a/model/grade_model.py +++ b/model/grade_model.py @@ -8,11 +8,11 @@ class Grade(Base): __tablename__ = "wl_grade" - id = Column(Integer, primary_key=True, autoincrement=True) - student_number = Column(String(50)) - course_number = Column(String(50)) - exam_sequence = Column(Integer) - score = Column(Numeric(5, 2)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + student_number = Column(String(50), comment="学生编号") + course_number = Column(String(50), comment="课程编号") + exam_sequence = Column(Integer, comment="考试序次") + score = Column(Numeric(5, 2), comment="分数") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/interview_model.py b/model/interview_model.py index ef95f07..5a210d9 100644 --- a/model/interview_model.py +++ b/model/interview_model.py @@ -8,13 +8,13 @@ class Interview(Base): __tablename__ = "wl_interview" - id = Column(Integer, primary_key=True, autoincrement=True) - interview_at = Column(DateTime) - student_id = Column(Integer) - room = Column(String(100)) - sequence = Column(Integer) - company_id = Column(Integer) - result = Column(Boolean) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="面试id") + interview_at = Column(DateTime, comment="面试时间") + student_id = Column(Integer, comment="学生id") + room = Column(String(100), comment="面试间") + sequence = Column(Integer, comment="面试序次") + company_id = Column(Integer, comment="面试的企业id") + result = Column(Boolean, comment="面试结果") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/relation_model.py b/model/relation_model.py index 55d9844..51e214d 100644 --- a/model/relation_model.py +++ b/model/relation_model.py @@ -10,10 +10,10 @@ class Relation(Base): __tablename__ = "wl_relation" - id = Column(Integer, primary_key=True, autoincrement=True) - source_id = Column(String(50)) - destination_id = Column(Integer) - relation_type = Column(String(50)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id") + source_id = Column(String(50), comment="关系来源标识") + destination_id = Column(Integer, comment="关系目标标识") + relation_type = Column(String(50), comment="关系类型") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/model/student_model.py b/model/student_model.py index c33568c..afc2c82 100644 --- a/model/student_model.py +++ b/model/student_model.py @@ -8,24 +8,24 @@ class Student(Base): __tablename__ = "wl_student" - id = Column(Integer, primary_key=True, autoincrement=True) - student_number = Column(String(50), nullable=False) - name = Column(String(100)) - gender = Column(String(20)) - birth_date = Column(Date) - id_card_number = Column(String(18)) - phone_number = Column(String(30)) - hometown = Column(String(100)) - graduate_school = Column(String(200)) - education = Column(String(50)) - hobbies = Column(String(500)) - trial_date = Column(Date) - expected_salary = Column(Numeric(12, 2)) - consultant_id = Column(Integer) - class_id = Column(Integer) - payment_method = Column(String(20)) - emergency_contact = Column(String(100)) - remark = Column(String(1000)) - created_at = Column(DateTime) - updated_at = Column(DateTime) - is_deleted = Column(default=False, nullable=False) + id = Column(Integer, primary_key=True, autoincrement=True, comment="id(逻辑主键)") + student_number = Column(String(50), nullable=False, comment="学号(业务主键)") + name = Column(String(100), comment="姓名") + gender = Column(String(20), comment="性别") + birth_date = Column(Date, comment="出生年月") + id_card_number = Column(String(18), comment="身份证号") + phone_number = Column(String(30), comment="电话号码") + hometown = Column(String(100), comment="籍贯") + graduate_school = Column(String(200), comment="毕业学校") + education = Column(String(50), comment="学历") + hobbies = Column(String(500), comment="兴趣爱好") + trial_date = Column(Date, comment="试听日期") + expected_salary = Column(Numeric(12, 2), comment="就业期望薪资") + consultant_id = Column(Integer, comment="顾问id") + class_id = Column(Integer, comment="班级id") + payment_method = Column(String(20), comment="支付方式") + emergency_contact = Column(String(100), comment="紧急联系人") + remark = Column(String(1000), comment="备注") + created_at = Column(DateTime, comment="数据创建时间") + updated_at = Column(DateTime, comment="数据更新时间") + is_deleted = Column(default=False, nullable=False, comment="逻辑删除字段") diff --git a/沃林数智学生管理系统数据库表的设计.xlsx b/沃林数智学生管理系统数据库表的设计.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ef7a2da6b13eebbc3db38e056343d8fd6135984b GIT binary patch literal 19038 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 G-}fG60GuHJ literal 0 HcmV?d00001