я должен динамически создавать новые таблицы для разных объектов? - PullRequest
0 голосов
/ 24 июня 2019

Я учусь создавать приложение, в котором пользователь может создавать новые темы и хранить свои заметки (домашнее задание и прочее) с датами.Я чувствую, что хочу создать новую таблицу для каждой темы, которую пользователь создает, и управлять ими отдельно.Это хорошая практика?

Я уже пытался создать одну таблицу, в которой «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 Ответ

2 голосов
/ 24 июня 2019

Это плохая практика. Здесь нет проблем с производительностью.

Создать таблицу для Subjects со столбцами:

Id, Subject_Name

Создать таблицу для Notes со столбцами:

Id, Subject_Id (внешний ключ), примечание, дата

Практическое правило. Как правило, для одного типа данных (модели) требуется одна таблица.

В этом случае у вас есть только Subjects и Notes, которые имеют отношение друг к другу. У Notes есть ссылка внешнего ключа на Subjects.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...