我应该为不同的对象动态创建新表吗?

时间:2019-06-24 11:49:05

标签: android mysql sql kotlin

我正在学习创建一个应用程序,用户可以在其中创建新主题并存储带有日期的笔记(作业和内容)。我觉得我想为用户创建和管理的每个主题创建一个新表。这是一个好习惯吗?

我已经尝试创建一个表,其中“ 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))
    }

不要理会表的属性...这些只是出于测试目的。

1 个答案:

答案 0 :(得分:2)

这是不好的做法。这里确实没有性能问题。

Subjects创建一个具有以下列的表:

  

Id,Subject_Name

Notes创建一个具有以下列的表:

  

Id,Subject_Id(外键),注释,日期

根据经验:通常,您需要为一种类型的数据(模型)使用一个表。

在这种情况下,您只有SubjectsNotes彼此之间有关系。 Notes具有对Subjects的外键引用。