node.js - child 家务模式的数据库设计

标签 node.js database postgresql database-design

我想知道保持数据库尽可能整洁的最佳做法。数据库是通过 express.js/node 访问的 postgresql。它适用于我正在开发的 child 杂务应用程序,它具有以下架构:

CHILDREN
    id
    name
    points
    rate
    created_at
    updated_at
    user_id

TASKS
    id
    description
    value
    days (boolean array - eg. [0,0,0,0,0,0,0])
    periods (boolean array - eg. [0,0])
    created_at
    updated_at
    user_id

FINISHED TASKS
    id
    task_id
    child_id
    completed (boolean)
    created_at
    updated_at
    period (boolean)
    day (int (0-6))

对于每个单独完成的任务,都会在数据库中创建一行。由于只有 400 个 child 在那里做家务,所以每天已经有大约 800 行被添加到 FINISHED TASKS 表中。

我有两个问题:

  1. 是否有更有效的方法来存储每个 child 一整天或类似的已完成的任务
  2. 随着规模的扩大,我每天可能会处理数万行 - 对于这样的应用来说,这可以接受吗?

最佳答案

通过中间桥接表将子表关联到任务表是执行此操作的常用方法。我对大型医院应用程序的经验是,一旦表格开始有数百万行并且性能下降,应用程序通常会将“完成的任务”存档到一个单独的存档表中。您最终可能会得到两个表,一个称为“事件任务”,其中包含“已完成”为 false 的任务,一旦任务完成,该行将移至存档的“已完成任务”表中。

根据您希望在未来对应用程序进行校对时付出的努力,现在就可以完成这项工作,以避免不得不重新访问它。

关于node.js - child 家务模式的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422547/

相关文章:

database - 实体属性值 (EAV) 的替代方案?

mysql - 每个客户的SQLite3数据库

database - 如何在 "diamond-shaped"关系系统中保持外键关系一致

sql - PostgreSQL 重复键值违反唯一约束,同时使用冲突时不执行插入操作

javascript - 连接后忽略服务器端的 socket.emit?

node.js - 防止导入 es6 默认导出

javascript - 从 Backbone.Router 模板访问 res.locals

postgresql - Postgres - 基于列值的不同聚合

sql - 忽略 Postgresql 批量插入错误

javascript - Node + express : How to get an element which made an HTTP GET request?