sqlite数据库多个表

时间:2018-08-01 14:16:48

标签: android sqlite

因此,我有一个场景正在制作一个用于考勤管理的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

基本上,我将为每个记录创建两个表。 但是我认为这种方式不是很好。 请告诉我这是正确的方法吗? 如果没有,请给我建议另一种方法。

1 个答案:

答案 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>>

  // ...
}