Миграция IOS DBAccess на новую структуру таблиц

Я читаю документацию по DBAccess, чтобы понять, соответствует ли она моим потребностям.

Мой вопрос касается миграции.

Например: у меня есть существующее приложение, реализованное с помощью DBAccess, использующее таблицу "Person" со следующими полями:
- id
- имя
- фамилия
- адрес

Что произойдет с базой данных, если я добавлю два других поля в класс Person:
- email
- phone_number
?
Добавляет ли DBAccess новые поля в таблицу базы данных автоматически?
Есть ли способ указать значения по умолчанию для новых добавленных полей?


person Patrik    schedule 14.04.2015    source источник


Ответы (1)


Да, если вы добавите эти два дополнительных свойства, DBAccess автоматически добавит дополнительные столбцы.

В настоящее время нет возможности указать значение по умолчанию для новых столбцов, все они будут инициализированы значением NULL, как и следовало ожидать.

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

+ (id)defaultValueForProperty:(NSString*)propertyName;

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

Я был бы рад вашим отзывам о том, что вы считаете подходящим решением.

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

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

Спасибо

person Adrian_H    schedule 14.04.2015
comment
Что ж, я думаю, что метод класса был бы очень полезен, в частности, при добавлении новых (или создании) полей, которые не могут быть нулевыми. - person Patrik; 14.04.2015
comment
Метод экземпляра, как вы говорите, может быть очень медленным для больших таблиц. Может быть, лучше предоставить способ запускать какой-нибудь SQL-запрос в качестве исправления для существующих данных, это может быть быстрее. Или возможность реализовать функцию класса, которая вызывается каждый раз при изменении таблицы. - person Patrik; 14.04.2015
comment
Я так понимаю, поэтому я понимаю, что вы обосновываете это тем, что запросы должны вести себя сами. Например, ГДЕ фамилия == '' ИЛИ ​​фамилия IS NULL. Потому что все объекты будут иметь значения свойств по умолчанию. Например, если бы вы добавили возраст столбца, хотя значение столбца в SQLite было бы NULL, значение в классе было бы 0. Когда этот объект был сохранен, он был бы сохранен с 0, а не с NULL. Я собираюсь внести изменения, потому что они простые, но мне интересно, есть ли другой сценарий, о котором я должен подумать, который я еще не рассмотрел. - person Adrian_H; 14.04.2015
comment
В настоящее время мы внедряем механизм обновления, это грубая проблема, которую нужно решить. На самом деле у нас есть система ревизий, когда сущность вызывается с текущей ревизией, и вы можете выполнить некоторый SQL для нее, но это нарушает жесткую природу DBAccess. Я быстро объясню этот момент. Мы проверяем целостность каждого установленного свойства, и поскольку нет способа сделать что-либо, что могло бы нарушить целостность напрямую с БД (ну, вы могли бы, но без использования фреймворка), мы знаем, что, если не считать серьезных внутренних ошибок SQLite, обязательства гарантированно увенчаются успехом. - person Adrian_H; 14.04.2015
comment
Я понимаю ваше объяснение и согласен с вами по поводу проблемы целостности. Я собираюсь начать использовать DBAccess в своем следующем проекте, ваши ответы помогли мне принять решение, так что... спасибо за вашу поддержку :) - person Patrik; 15.04.2015
comment
Привет @Patrik, в версии 1.06.1 есть изменение, описанное выше. Немного изменено, так как мы посчитали, что словарь является более чистой реализацией. Вот ссылка на документацию и пример. Спасибо, Адриан. db-access.org/default-property-values - person Adrian_H; 15.04.2015