【发布时间】:2011-11-13 01:10:28
【问题描述】:
我正在开发一个允许用户相互交易信用的小型 Web 应用程序。我想在我的初始设计(效率、灵活性、安全性等)中加入你们的 cmets。
特别是,典型的交易发生如下:
用户 A 可以提议做某项工作以换取 X 积分。用户 B 和 C 可以接受该提议。将从 B 和 C 的账户中扣除总共 X 个学分。作业完成后,X 积分将添加到 A 的帐户中。 A 可以使用赚取的积分与其他用户进行交易。
我正在考虑一个包含 3 个表的数据库:Job、Transaction 和 Account。帐户表将跟踪每个用户获得和花费的信用。
每次用户 A 为用户 B 和 C 完成一项工作时:
Transaction表中记录了两笔交易:一笔从B到A的转账,一笔从C到A的转账
账户表将被更新:A、B、C 的账户中的可用积分将被更新
作业表也已更新。
(所有这些操作都将包装在一个 SQL“事务”中,即所有记录都被更新,或者不更新)
当交易被恢复时(例如,A 和 B 之间,但 A 和 C 之间没有),A 和 B 的 Account 和 Account_History 将被更新,A 和 B 之间的交易将被设置为“revert”。
Rails 中的草图如下:
-
类作业
属性::job_id, :total_credit,:created_at, :updated_at
belongs_to :seller, :class_name => “用户”belongs_to :buyers, :class_name => "User" # 一项工作可以为多个用户完成
-
类交易
属性:transaction_id、:buyer_id、:seller_id、:status、
:credit, :created_at, :updated_atbelongs_to :seller, :class_name => “用户”belongs_to :buyer,
:class_name => "用户#每次信用交换一个交易记录
属于_to :account -
类帐户
属性::account_id, :user_id, :available_credit
belongs_to: 用户
我不确定我是否应该:
-
创建 Account_History 表以显示提取的摘要统计信息 来自 Account 表(例如上个月的交易、总信用 赚取/花费等)给客户,或将这些信息存储在一个系列中 缓存查询。
表示一个待处理的交易(即,当 B 接受 A 的要约但 工作尚未完成)和已完成的事务(即,当 B 接受 A 的工作)在事务表中的单独记录中。这 其他选择只是改变交易状态 待完成。
感谢您的 cmets。
【问题讨论】:
标签: ruby-on-rails database-design relational-database