使用QR码和Firebase设计考勤系统

时间:2018-10-10 20:23:29

标签: javascript android firebase firebase-realtime-database qr-code

我正在做一个学术项目。简单的想法就是创建一个像这样的考勤系统:

  1. 教师在网站上登录其帐户。
  2. 老师选择一个部分。
  3. 老师会生成一个QR码,以便学生扫描它以参加。
  4. 学生使用 android应用登录到他的帐户。
  5. 学生打开扫描仪以扫描QR码。
  6. 系统会在该特定部分和特定日期标记该学生的出勤情况。

这是我正在使用的Firebase数据库的设计

db{  

    Teachers{
         "cEEbohuR2bK6opZJ1z5RoPrbbrx1":{ //auth uid  
              tchName:"Jason",
              tchID:"24123"
    }
    Students:{
         "GsBEVEtZ9CeqzztDWEQd9GluVJJ3":{  //auth uid
              studentName:"Mark",
              stuID:"37294"
}
    Courses:{
         "JAVA101":{  //courseID
              courseName:"Java Programing",
}
    Sections:{  
        "56345":{ //secID
         tchID:"24123", //acts like a foreign key
         courseID:"JAVA101", //acts like a foreign key
           Students:{
            "37294":{
               studentName:"Mark"               
       }
   }
}

    Attendance:{  
        "56345":{ //secID
           "1-8-2018":{ //auto generated date?
               "37294":{ //stuID
                  attended:"true" // sets to true after scanning the qr code
            }
          }
        } 
     }
  }

我对qr代码事物的想法是,当老师生成它时,QR中的值将是部门ID,然后在学生扫描它时,我需要以某种方式将其与学生ID合并,获得两个值后,自动生成演讲日期 ,因此我将具有 3个值(secID,stuID,日期),将其插入到出勤树中,并使“ attended”属性设置为“ true”

现在我的问题是:

  1. 有没有更好的方法来设计数据库?
  2. 我上面的qr想法是否有可能执行或有更好的方法?

1 个答案:

答案 0 :(得分:0)

您需要讲师检索出勤表吗?如果您的需求不同,则上面显示的嵌套对象可能会更扁平。在Firebase中,您需要在视图之后创建数据库结构(例如,将从数据库检索以显示给用户的内容)。强烈建议不要嵌套,并且可以重复数据。

例如,如果我希望用户通过选择部分ID和日期来阅读与会者列表,则可以创建一个像这样的表:

Attendance:{
    "123456":                //section ID
       {"01-08-2019":        //date
           {"865768": true}  //student ID: attendance status  
       }
           }

我可以使用参考文献检索与会者列表:

`Attendance/${sectionID}/${date}/`

或者如果我希望我的用户单击学生的ID并检索该学生的所有出勤记录,我可以列出一个扁平的列表:

AttendanceRecord: {
     "865768": {     //student ID
     "LxLy1a":   {   //unique attendance record key
               date: "01-08-2019",
               sectionId: "123456",
               status: true
                }                       
                   }

如果我的应用程序的视图不同,则我将不得不以不同的方式构造数据库,以便更轻松地从Firebase读取数据,而不会深入嵌套对象。

您一定不要害怕重复数据。根据应用程序中的视图更改数据库。