首页 文章

选择处理出勤的表格

提问于
浏览
0

我正在研究我的PHP项目[处理学生出勤系统] . 我有一个学生列表以及他们的id [jntuno],我需要在mysql中创建一个数据库,用于存储每个学生每个学生的每日出勤率 . 所以我用这种方式创建了我的表:

表: students

字段:

slno int(5) auto increment,
jntuno char(15),
name char(50),
primary key(slno,jntuno).

数据:

Data in students table

这个 students 表包含学生名单和他们的ID

现在我创建了另一个表:

表: dailyatt

字段:

date date,
subject char(10),
classesconducted int(2),
`11341A0501` int(2),
`11341A0502` int(2),
`11341A0503` int(2),
.
.
.
`11341A0537` int(2),
primary key(date,subject).

这个表看起来像:

+------------+-----------+-----------------+------------+-----------+-----------+
|date        |subject    |classesconducted |11341A0501  |11341A0502 |11341A0503 |....
+------------+-----------+-----------------+------=-----+-----------+-----------+
|            |           |                 |            |           |           |

现在,每天进入PHP网站后,将为当天教授的每个科目创建一个新行 .

但是很多人说数据库模型不是很好...
这个数据库结构有什么问题?

那么有人可以建议我为这种问题找到更好的模型吗?

2 回答

  • 3

    想象你在学校有200名学生 . 您的第二个表中有200列 . 你应该将它分成两个表 . 一个用于在学校提供的所有课程,第二个用于实际的出勤记录 .

    "classes" table

    enter image description here

    "attendance table"

    enter image description here

    然后加入他们 .

    SELECT student_id, class_name, date, class_attended
    FROM attendance AS ABB2
        LEFT JOIN classes AS ABB1 ON ABB1.id = ABB2.class_id
    
  • 2

    你正在为每个学生创建一个专栏,我认为这是件坏事 .

    为什么你不创建像这样的表?

    `date` date,
    `slno` int(5),
    `slnoconducted` int(2),
    `subject` char(10),
    primary key(`date`, `slno`, `subject`)
    

    因此,您可以在此表中插入一些值,例如:

    ("2013-10-06", 1, 5, "Class A")
    

    它将被视为:在2013-10-06之前,具有slno#1(11341A0501)的学生获得了slnoconducted == 5,描述为“A类” .

    之后,如果您想要,例如,今天获取所有记录,您可以使用查询:

    SELECT * FROM dailyatt WHERE `date` = '2013-10-06'
    

    如果要获取一个学生的所有记录,可以使用查询:

    SELECT * FROM dailyatt WHERE `slno` = 1
    

    乃至:

    SELECT d.*, s.`jntuno`, s.`name` 
    FROM `dailyatt` d
    LEFT JOIN `students` s ON d.`slno` = s.`slno`
    WHERE `date` = '2013-10-06'
    

    这是处理记录的更好方法 . 如果您要为每个学生创建列,您将失去数据库的灵活性,因为您必须在 students 表中的任何更改后创建/删除另一列 .

    我希望我说得对,因为我不确定我的英语水平如何 .

相关问题