Работа с взаимоисключающими значениями в базе данных ⇐ Android
-
Anonymous
Работа с взаимоисключающими значениями в базе данных
У меня есть БД для хранения задач. Задача может быть повторяемой, ее можно запланировать на несколько дней недели или несколько дат.
Структура:
enum class ScheduleType(val value: Int) { НЕТ(-1), ДАТА(0), ДЕНЬ НЕДЕЛИ(1); } @Сущность( ForeignKeys = [ForeignKey( сущность = Пользователь::класс, родительские столбцы = arrayOf("id"), childColumns = arrayOf("authorId"), onDelete = ForeignKey.CASCADE )] ) класс данных Задача( @PrimaryKey(autoGenerate = true) //TODO не генерируется автоматически действительный идентификатор: Int? = ноль, тип значения: ScheduleType, val заголовок: Строка, val тело: String?, valauthorId: Int, val isFavorite: Boolean = false, val созданная дата: ZonedDateTime, val updateDate: ZonedDateTime? = ноль, val LastSyncDate: ZonedDateTime? = ноль, val deleteDate: ZonedDateTime? = ноль, ) @Сущность( ForeignKeys = [ForeignKey( сущность = Задача::класс, родительские столбцы = arrayOf("id"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], ) класс данных ScheduleTask( @PrimaryKey var TaskId: Int = ID_UNSPECIFIED, время вал: LocalTime, val isRepeat: Boolean = false, ) @Сущность( ForeignKeys = [ForeignKey( сущность = ScheduleTask::класс, родительские столбцы = arrayOf("taskId"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], PrimaryKeys = ["taskId", "weekDay"] ) класс данных ScheduleWeekWithTime( var TaskId: Int = ID_UNSPECIFIED, val WeekDay: WeekDays, val LastScheduleDate: ZonedDateTime? = ноль, val LastDoneDate: ZonedDateTime? = ноль, val LastDelayedTime: ZonedDateTime? = ноль, val LastDelayValue: Long = 0 ) @Сущность( ForeignKeys = [ForeignKey( сущность = ScheduleTask::класс, родительские столбцы = arrayOf("taskId"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], PrimaryKeys = ["taskId", "дата"] ) класс данных ScheduleDateWithTime( var TaskId: Int = ID_UNSPECIFIED, дата валидации: LocalDate, val LastScheduleDate: ZonedDateTime? = ноль, val LastDoneDate: ZonedDateTime? = ноль, val LastDelayedTime: ZonedDateTime? = ноль, val LastDelayValue: Long = 0 ) Нормально ли иметь одинаковые атрибуты в ScheduleDateWithTime и ScheduleWeekWithTime, например «lastScheduleDate, LastDoneDate..»? Есть ли способ сохранить их вместе в одной таблице или для этого может быть более работоспособная структура базы данных?
У меня есть БД для хранения задач. Задача может быть повторяемой, ее можно запланировать на несколько дней недели или несколько дат.
Структура:
enum class ScheduleType(val value: Int) { НЕТ(-1), ДАТА(0), ДЕНЬ НЕДЕЛИ(1); } @Сущность( ForeignKeys = [ForeignKey( сущность = Пользователь::класс, родительские столбцы = arrayOf("id"), childColumns = arrayOf("authorId"), onDelete = ForeignKey.CASCADE )] ) класс данных Задача( @PrimaryKey(autoGenerate = true) //TODO не генерируется автоматически действительный идентификатор: Int? = ноль, тип значения: ScheduleType, val заголовок: Строка, val тело: String?, valauthorId: Int, val isFavorite: Boolean = false, val созданная дата: ZonedDateTime, val updateDate: ZonedDateTime? = ноль, val LastSyncDate: ZonedDateTime? = ноль, val deleteDate: ZonedDateTime? = ноль, ) @Сущность( ForeignKeys = [ForeignKey( сущность = Задача::класс, родительские столбцы = arrayOf("id"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], ) класс данных ScheduleTask( @PrimaryKey var TaskId: Int = ID_UNSPECIFIED, время вал: LocalTime, val isRepeat: Boolean = false, ) @Сущность( ForeignKeys = [ForeignKey( сущность = ScheduleTask::класс, родительские столбцы = arrayOf("taskId"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], PrimaryKeys = ["taskId", "weekDay"] ) класс данных ScheduleWeekWithTime( var TaskId: Int = ID_UNSPECIFIED, val WeekDay: WeekDays, val LastScheduleDate: ZonedDateTime? = ноль, val LastDoneDate: ZonedDateTime? = ноль, val LastDelayedTime: ZonedDateTime? = ноль, val LastDelayValue: Long = 0 ) @Сущность( ForeignKeys = [ForeignKey( сущность = ScheduleTask::класс, родительские столбцы = arrayOf("taskId"), childColumns = arrayOf("taskId"), onDelete = ForeignKey.CASCADE )], PrimaryKeys = ["taskId", "дата"] ) класс данных ScheduleDateWithTime( var TaskId: Int = ID_UNSPECIFIED, дата валидации: LocalDate, val LastScheduleDate: ZonedDateTime? = ноль, val LastDoneDate: ZonedDateTime? = ноль, val LastDelayedTime: ZonedDateTime? = ноль, val LastDelayValue: Long = 0 ) Нормально ли иметь одинаковые атрибуты в ScheduleDateWithTime и ScheduleWeekWithTime, например «lastScheduleDate, LastDoneDate..»? Есть ли способ сохранить их вместе в одной таблице или для этого может быть более работоспособная структура базы данных?
Мобильная версия