Я использую Firebird 2.1, и я ищу лучший способ решить эту проблему.Вопрос по дизайну базы данных - это лучшее решение?
Я пишу приложение для календаря. Различные записи календаря пользователей хранятся в большой таблице календаря. Каждая запись календаря может содержать набор напоминаний - только одно напоминание/запись.
Статистически таблица таблицы может вырасти до сотен тысяч записей с течением времени, в то время как будет гораздо меньше напоминаний.
Мне нужно запросить напоминания на постоянной основе.
Какой из лучших вариантов?
A) Хранить информацию на напоминания в таблице календаря (в этом случае я собираюсь запросить сотни тысяч записей для IsReminder = 1)
B) Создайте отдельную таблицу Напоминания, которая содержит только ID записей календаря с установленными напоминаниями, затем запросите две таблицы с операцией JOIN (или, возможно, создайте представление на них)
C) Я могу хранить всю информацию о напоминаниях в таблице напоминаний, а затем запрашивать только эту таблицу , Недостатком является то, что некоторая информация должна дублироваться в обеих таблицах, например, чтобы показать напоминание, мне нужно знать и хранить время начала события в таблице напоминаний - таким образом, я поддерживаю две таблицы с одинаковыми значениями.
Как вы думаете?
И еще один вопрос: таблица календаря будет содержать календарь нескольких пользователей, разделенных только полем UserID. Поскольку может быть только 4-5 пользователей, даже если я помещу индекс в это поле, его избирательность будет очень плохой - что плохо для таблицы с сотнями тысяч записей. Есть ли обходной путь здесь?
Спасибо!
Спасибо за исчерпывающий ответ :-) Если UserID не является частью составного первичного ключа, а просто поле с индексом, я полагаю, что его избирательность будет очень плохой, а скорость поиска будет медленной? – Steve
@Steve: индексы были изобретены для быстрого выполнения запросов - если у вас есть поле с индексом, должно быть возможно писать запросы, используя этот индекс. –
Doc, я читал, что селективность индекса Firebird является важным фактором. Если поле имеет низкую избирательность по индексу (только несколько разных значений), вы можете не увидеть увеличение скорости ... – Steve