因此,我有一个场景正在制作一个用于考勤管理的Android应用程序。 我想将所有记录保存在SQLite数据库中。就像我的应用程序一样,它将允许用户添加班级学生的姓名。其次,我的应用程序还能够存储多个班级的出勤数据,例如B.tech的记录 CSEsem1,sem2等。 所以我想到了以下想法:
我将创建一个主表,该表将具有col1
中的记录名称,其对应的表名称为学生姓名,而在col3
中将具有相应的表名称用于出勤数据。
col1(Records name) col2(names Table) col3(attendance Table)
B.tech CSE CSE-students CSE-attendance
B.tech ECE ECE-students ECE-attendance
基本上,我将为每个记录创建两个表。 但是我认为这种方式不是很好。 请告诉我这是正确的方法吗? 如果没有,请给我建议另一种方法。
答案 0 :(得分:0)
如何?
您为学生运行一张桌子:
@Entity(tableName = "students")
class Student {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
@ColumnInfo(name = "name")
lateinit var type: String
}
还有一张出勤表:
@Entity(
tableName = "attendance",
foreignKeys = [(ForeignKey(
entity = Student::class,
onDelete = ForeignKey.CASCADE,
parentColumns = arrayOf("id"),
childColumns = arrayOf("studentId")
))]
)
class Attendance {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
@ColumnInfo(name = "date")
lateinit var type: String
@ColumnInfo(name = "class")
lateinit var type: String
@ColumnInfo(name = "studentId")
lateinit var type: Int
}
用法:
@Dao
interface AttendanceDao {
@get:Query("SELECT * FROM attendance WHERE studentId = :studentId")
fun attendance(studentId: Int): Single<List<Attendance>>
@get:Query("SELECT students.name FROM attendance INNER JOIN students ON students.id == attendance.studentId WHERE date = :day AND class = :class")
fun attendance(day: String, class: String): Single<List<String>>
// ...
}