【问题标题】:IOS DBAccess migration to new table structureIOS DBAccess 迁移到新的表结构
【发布时间】:2015-04-14 14:04:24
【问题描述】:

我正在阅读 DBAccess 文档以了解它是否能满足我的需求。

我的问题是关于迁移的。

例如:我有一个现有的应用程序,使用 DBAccess 实现,使用具有以下字段的表“Person”:
- 身份证
- 名称
- 姓氏
- 地址

如果我将其他两个字段添加到 Person 类,数据库会发生什么情况:
- 电子邮件
- 电话号码
?
DBAccess 会自动向数据库表中添加新字段吗?
有没有办法为新添加的字段指定默认值?

【问题讨论】:

    标签: ios database migration field dbaccess


    【解决方案1】:

    是的,如果您添加这两个附加属性,DBAccess 将自动添加附加列。

    目前,无法为新列指定默认值,它们都将按照您的预期使用 NULL 进行初始化。

    您对默认值的建议很有趣,我很惊讶以前没有出现过。它似乎既容易实现又是一个非常合乎逻辑的功能。唯一奇怪的小事是,如果我要添加方法

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

    到框架,然后在创建新列时调用它,用户可能希望每行都发生这种情况,而不是在创建列时发生一次,因此他们可以自定义该值,也许从其他地方的内容计算它。

    对于您认为合适的解决方案,我很乐意收到您的反馈。

    我个人倾向于类和实例方法,如果开发人员实现了实例方法,那么每个单独的行都将被解析和重写,这可能会很慢,但也是一个非常有用的功能。

    不管怎样,添加这样一个简单的功能应该不会超过一个小时左右。我们只需要看看我们是否可以看到任何陷阱。

    谢谢

    【讨论】:

    • 好吧,我认为类方法会非常有用,尤其是在添加不能为空的新(或创建)字段时。
    • 实例方法,如您所说,对于大型表来说可能非常慢。也许最好提供一种方法来运行一些 sql 查询来修复现有数据,这样会更快。或者实现每次修改表时调用的类函数的可能性。
    • 我接受它,所以我理解你背后的原因是让查询表现自己。例如“WHERE surname == '' OR surname IS NULL”。因为,所有对象都将具有其默认属性值。例如,如果您要添加列年龄,尽管 SQLite 中的列值为 NULL,但类中的值将是 0。当该对象被持久化时,它将被保存为 0 而不是 NULL。我将进行更改,因为它们很简单,但我想知道是否还有其他我应该考虑的场景,我还没有考虑过。
    • 我们目前正在实施升级机制,这是一个很难解决的问题。实际上,我们确实有一个修订系统,其中使用当前修订调用实体,您可以针对它执行一些 SQL,但它打破了 DBAccess 的刚性性质。我会很快解释这一点。我们检查设置的每个属性的完整性,因为没有办法做任何可能直接破坏数据库完整性的事情(你可以,但不使用框架),我们知道没有严重的内部 SQLite 错误,承诺一定会成功。
    • 我理解你的解释,我同意你对完整性问题的看法。我将在下一个项目中开始使用 DBAccess,您的回答帮助我做出了决定,所以...感谢您的支持 :)
    猜你喜欢
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2016-09-13
    • 2021-04-21
    • 2010-09-16
    • 2016-05-05
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多