2025.4.7

根据您提供的代码和需求,您正在开发一个基于Android的个人理财软件,以下是完整的数据库建表语句(基于SQLite):

1. 预算表(budget)建表语句

CREATE TABLE budget (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    month TEXT NOT NULL,
    amount REAL NOT NULL
);

2. 交易表(transactions)建表语句

CREATE TABLE transactions (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    date TEXT NOT NULL,
    type INTEGER NOT NULL,
    amount REAL NOT NULL,
    category TEXT NOT NULL,
    description TEXT
);

关键设计说明:

  1. 主键设计:两个表都使用_id作为自增主键,这是Android开发中的常见做法。

  2. 数据类型选择

    • 金额使用REAL类型存储浮点数
    • 日期使用TEXT类型存储(建议格式:YYYY-MM-DD)
    • 交易类型type用整数表示(1:收入, 2:支出)
  3. 约束条件

    • 所有必填字段都设置为NOT NULL
    • 预算月份(month)和交易日期(date)必须非空
    • 交易类别(category)必须非空
  4. 扩展建议

    • 可添加外键约束关联预算和交易表(如交易关联到某个月份的预算)
    • 可考虑添加索引提高查询性能(如按日期或类别查询)

完整实现代码(Java):

// 预算表
private static final String CREATE_TABLE_BUDGET = "CREATE TABLE " + TABLE_BUDGET + " (" +
        COLUMN_BUDGET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_BUDGET_MONTH + " TEXT NOT NULL, " +
        COLUMN_BUDGET_AMOUNT + " REAL NOT NULL);";

// 交易表
private static final String CREATE_TABLE_TRANSACTION = "CREATE TABLE " + TABLE_TRANSACTION + " (" +
        COLUMN_TRANSACTION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_TRANSACTION_DATE + " TEXT NOT NULL, " +
        COLUMN_TRANSACTION_TYPE + " INTEGER NOT NULL, " +
        COLUMN_TRANSACTION_AMOUNT + " REAL NOT NULL, " +
        COLUMN_TRANSACTION_CATEGORY + " TEXT NOT NULL, " +
        COLUMN_TRANSACTION_DESCRIPTION + " TEXT);";

数据库升级考虑:

当需要修改表结构时,应在onUpgrade()方法中处理,常见做法包括:

  1. 删除旧表后重建
  2. 使用ALTER TABLE添加新列
  3. 通过临时表迁移数据(对于复杂修改)

例如添加新列的SQL:

ALTER TABLE transactions ADD COLUMN remark TEXT;

这些建表语句已涵盖您个人理财软件的核心数据存储需求,可根据实际业务需求进一步扩展。

posted @ 2025-04-07 23:04  258333  阅读(25)  评论(0)    收藏  举报