我正在学习创建一个应用程序,用户可以在其中创建新主题并存储带有日期的笔记(作业和内容)。我觉得我想为用户创建和管理的每个主题创建一个新表。这是一个好习惯吗?
我已经尝试创建一个表,其中“ ID”基本上是主题名称,然后将注释和日期存储在以下列中。但是,我认为从表中读取将非常耗时并且也难以管理。我还尝试过使用带有主题名称的静态表,然后从为每个主题存储的名称中创建表。
示例情况
我创建了一个主题-“英语”
然后我为“英语”动态创建一个包含“注释”和“日期”两列的表,然后向其中添加内容
然后假设我们添加另一个主题-“科学”
然后我再次在上面的两列中动态创建一个名为“科学”的表。
我将这些表的名称(“英语”,“科学”)存储在单独的表中。
这是我目前的工作方式
val CREATE_SUB_NAME_TABLE = "create table " + DBStructure.TABLE_SUB_NAMES + " (" + DBStructure.KEY_SUB_NAME + " Text)"
val DROP_TABLE_QUERY = "drop table if exists "
private fun queryCreateSubjectTable(subName : String) : String {
return "create table " + subName + " (" + DBStructure.KEY_EVENT_NAME + " Text, " + DBStructure.KEY_EVENT_DATE + " Text, " +
DBStructure.KEY_EVENT_MONTH + " Text, " + DBStructure.KEY_EVENT_YEAR + " Text)"
}
fun addSubjectName(subName: String){
val db = this.writableDatabase
val values = ContentValues()
values.put(DBStructure.KEY_SUB_NAME, subName)
db.insert(DBStructure.TABLE_SUB_NAMES, null, values)
createSubjectTable(subName, db)
db.close()
}
private fun createSubjectTable(subName : String, db : SQLiteDatabase){
db.execSQL(queryCreateSubjectTable(subName))
}
不要理会表的属性...这些只是出于测试目的。
答案 0 :(得分:2)
这是不好的做法。这里确实没有性能问题。
为Subjects
创建一个具有以下列的表:
Id,Subject_Name
为Notes
创建一个具有以下列的表:
Id,Subject_Id(外键),注释,日期
根据经验:通常,您需要为一种类型的数据(模型)使用一个表。
在这种情况下,您只有Subjects
和Notes
彼此之间有关系。 Notes
具有对Subjects
的外键引用。