Я пишу свое первое приложение для Android и буду использовать базу данных SQLite, поэтому постараюсь максимально ограничить размер, но я думаю, что вопрос в целом относится к дизайну базы данных.
Я планирую хранить записи, которые будут иметь текст и дату создания. Приложение является автономным приложением, т. Е. Оно не будет ссылаться на Интернет, и только один пользователь будет обновлять его, поэтому нет никаких шансов, что будет иметься более одной записи с определенной датой.
Моя таблица все еще нуждается в столбце идентификатора? Если да, каковы преимущества использования идентификатора в качестве идентификатора записи по сравнению с датой?
Ответы:
ИМХО, лучше избегать использования столбца даты в качестве первичного ключа.
Я работал над системами, в которых поле даты используется в качестве первичного ключа, и написание запросов для извлечения подмножеств данных является проблемой, если вы работаете с полями даты.
Некоторые другие моменты, которые вы можете рассмотреть:
Вы можете подумать, что момент времени уникален, но это скорее зависит от гранулярности столбца даты. Это минуты, секунды, миллисекунды и т. Д. Можете ли вы быть абсолютно уверены, что никогда не получите нарушение первичного ключа?
Наконец, если вы захотите перенести базу данных на другую платформу, вы можете снова столкнуться с проблемами, когда детализация данных о дате отличается между платформами.
Вы, конечно, должны сбалансировать идеал с тем, с чем вам нужно работать. Если пространство действительно так важно, использование столбца даты может быть меньшим из двух зол. Это дизайнерское решение, которое вам придется принять.
Редактировать:
Я должен отметить, что это никоим образом не означает, что это плохое дизайнерское решение. Просто могут быть проблемы с практичностью рассматриваемой СУБД.
источник
Нет, вам не нужен столбец идентификатора, определенный в вашей схеме, если вы можете гарантировать, что никогда не будет повторяющейся даты.
НО ...
... тем не менее, вы могли бы использовать его в любом случае. Небольшой секрет здесь заключается в том, что SQLite уже имеет уникальный, автоматически увеличивающийся идентификатор для каждой таблицы с именем ROWID. Если вы объявите в своей таблице автоматически увеличивающийся столбец целых чисел в качестве PK, SQLite не создаст новый столбец - он просто создаст псевдоним этого ранее существующего столбца ROWID.
http://www.sqlite.org/autoinc.html
Таким образом, вы не будете экономить место, не используя столбец ID, поскольку вы получаете по одному на таблицу, хотите вы этого или нет!
источник
Используйте поле идентификатора, если выполняется одно из следующих условий:
Прочитайте этот вопрос: существует ли канонический источник, поддерживающий «всех суррогатов»?
Редактировать:
Так как, на мой взгляд, кажется, что ничего из вышеперечисленного не выполняется, вам не нужно использовать поле идентификатора, но вы можете использовать его, если хотите.
источник
Имейте в виду, что вы также можете изменить значение столбца «дата»
created_at
наupdated_at
или любое другое изменение в том же духе, что, на мой взгляд, является очень распространенным случаем.Добавление столбца id в некоторых случаях даст вам больше гибкости при изменении дизайна.
источник