Основные данные - необязательные атрибуты и производительность - PullRequest
8 голосов
/ 04 августа 2010

В соответствии с Руководством по программированию базовых данных:

Вы можете указать, что атрибут является необязательным, то есть ему не обязательно иметь значение.В целом, однако, вам не рекомендуется делать это, особенно для числовых значений (обычно вы можете получить лучшие результаты, используя обязательный атрибут со значением по умолчанию - в модели - 0).Причиной этого является то, что SQL имеет специальное поведение сравнения для NULL, которое отличается от нулевого значения Objective-C.NULL в базе данных не совпадает с 0, и поиск 0 не будет сопоставлять столбцы с NULL.

Я всегда делал числовые значения необязательными, но не для дат и строк.В моем коде удобно основывать логику на датах и ​​/ или строках, равных нулю.

Исходя из вышеизложенных рекомендаций, я рассматриваю возможность сделать все в моей базе данных необязательным.Для дат я могу установить значение модели по умолчанию равным 0, а для строк - модель по умолчанию ничего ("").Затем в моем коде я мог бы проверить даты для [date timeIntervalSince1970]! = 0 и строки для string.length! = 0.

Вопрос для относительно небольшой базы данных действительно ли это имеет значение для ядраТочка зрения производительности данных?И что за компромисс, если данный атрибут никогда не будет напрямую запрашиваться через предикат?

1 Ответ

10 голосов
/ 04 августа 2010

Я не видел каких-либо проблем с производительностью для небольших и средних наборов данных. Я подозреваю, что это то, с чем вы бы столкнулись на стадии производительности вашего приложения.

Лично я использую ту же логику, что и нечисловые, необязательные, если это имеет смысл, поскольку действительно облегчает код, что, в свою очередь, дает мне больше времени для дальнейшей оптимизации.

...