[关闭]
@yanzhiwei147 2015-03-09T06:29:09.000000Z 字数 1402 阅读 1257

数据库设计

设计 数据库


  1. 底层数据库设计(ORM) [1]
    • 时间:--;
    • 输出:用例图、产品竞争分析报告、类图等;
    • 目标:基于model粒度交流的接口;
      1. 基于Mantle与FMDB的适配器屏蔽直接使用SQL语句;
      2. 协议化的ORM方法(数据库表间映射关系、主键、默认值、存取忽略列表等);
  2. 底层数据库实现(ORM)
  3. 底层数据库测试/demo(ORM)
  4. 基于ORM数据库重新设计CacheDao
  5. 数据库升级[2]
    • 时间:xx
    • 输出:设计方案、对比分析报告;
    • 目标:探索出应用内SQLite数据库迁移(升级/降级)的最佳实践;

  1. > PRAGMA user_version;
  2. > PRAGMA user_version = 1;
  1. 构建基于user_version的升级体系,使用xml文件进行版本追踪。[4];
  2. 升级方式:原生语句支持重命名表新增列
    • 原表上增加列
      1. 检测列是否存在: FMDB提供columnExists:inTableWithName:方法
      2. 添加新列:ALTER TABLE table ADD COLUMN new_column TEXT;
    • 重命名表:ALTER TABLE old_table RENAME TO new_table
    • 同表名数据迁移(X->X
      1. 获取保存表X的所有索引以及触发器相关信息:SELECT type, sql FROM sqlite_master WHERE tbl_name='X'
      2. 使用CREATE TABLE语句创建表new_X
      3. 表X迁移内容到表new_X使用类似语句:INSERT INTO new_X SELECT ... FROM X.
      4. 如果启用外键约束则禁用:PRAGMA foreign_keys=OFF;
      5. 移除旧表XDROP TABLE X;
      6. 重命名表new_X表XALTER TABLE new_X RENAME TO X;
      7. 使用CREATE INDEXCREATE TRIGGER重建索引以及触发器关系,参考步骤一中持有的原关系进行改造。
      8. 如果原先启用外键约束(步骤4)则执行PRAGMA foreign_key_check验证该模型没有打破原有外键关系后执行PRAGMA foreign_keys=ON来重新启用外键约束
      9. 如果有视图引用了表X因为模型改变被影响到则使用DROP VIEW并重建它们


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注