帮助我为iou Web应用程序设计数据库模式

时间:2011-03-01 02:58:14

标签: php mysql database database-design schema

我正在考虑制作一个iou(我欠你)的网络应用程序,我可以跟踪谁欠我和什么。我这样做是一个辅助项目。无论如何,我没有数据库架构设计的经验。应用程序设计如下所示: enter image description here

现在,我知道我需要一个至少包含以下内容的用户表:

UserTable:
username, usernameId (pk), password, passwordHint, email

然后,我对如何从那里开始感到困惑。我应该为每个人#1,人#2等制作新表吗?或者,我是否应该使用所有“交易”的另一个表IouTable并使用用户名作为fk?

IouTable:
usernameId, personName, amount, description, date

因此,当用户Yko登录时,它将运行此查询: SELECT * FROM IouTable WHERE usernameId = username(可能在这里弄错了)

然后,我会将这些行单独分开并将每个人的每笔交易都放在自己的页面上。

提前感谢任何帮助/建议/建议!!!

4 个答案:

答案 0 :(得分:3)

绝对是所有欠条的一张桌子。

情景1:作为Yko,我想要一份我所欠的所有人的名单以及总数

SELECT personName, sum(amount) totalOwed FROM IouTable WHERE usernameId = <Yko>

情景2:作为Yko,我想知道我欠鲍勃多少以及为什么。

SELECT amount, description, date FROM IouTable WHERE usernameId = <Yko> and personName = 'Bob'

让我们看一下您的情况。

  1. User表看起来很不错。关键候选人包括用户名,usernameId和电子邮件。代理用户名Id与密钥的任何一个一样好。

  2. IouTable列出了所有的IOU。这个表有几个问题。

    • Perhaphs a Yko在同一天两次从Bob那里借出了2欧元,并且没有费心填写说明。在这种情况下,您没有正确的方法来区分这两个事务。您可能应该添加transactionId以唯一标识事务

    • 此外,Yko可能有两个叫鲍勃的朋友。 Yko如何将这两者相互分开。是否应该有Yko可以贷款的朋友列表?

    • 最终Yko应该付钱。 Yko可能可以从表中清除债务,但是后来我们怎样才能找出谁借给谁多少钱呢?是否应该有一个专栏来说明部门是否已经支付了?

    • Yko的一些朋友甚至可能会考虑以增量的方式获得回报。 Yko可能会编辑所欠的原始金额但是我们不会在第一时间知道需要多少。是否应该有一个专栏告诉我们到目前为止已支付了多少部门?如果Yko希望更密切地监控债务,那么所有还款的清单可能都是好主意。然后,您可以通过总结已偿还的金额来计算剩余的债务总额。

答案 1 :(得分:1)

TABLE User:
username, password, passwordHint, email
PK = username

TABLE Iou:
username, pesronName, date+time, amount, description, repaid(true if personName has repaid it yet)
PK = username,personName,date+time (or, make an auto-incrementing id num)

答案 2 :(得分:0)

如果你的意思是跟踪2个用户之间的IOU,那么IOU表将有一个外键返回到Users表,一个用于“ower”,另一个用于“owed”。

答案 3 :(得分:0)

我的公司在几年前以同样的意图开始了我们自己的小方案项目,我们上周终于发布了它。它比原先预期的要长得多,现在可以跟踪任何类型的欠条,并与Facebook和Twitter集成。如果您想查看,请转到IOUmate.com

我当然不是想阻止你构建自己的应用程序。但是,如果您正在寻找此功能(就像我们一样)并且找不到解决方案,请查看我们的应用程序并节省一些时间。

谢谢, 丹


P.S。我建议您添加一个朋友表来规范您的IouTable。然后,每个IOU可以与用户和朋友相关联。如果你想朝着我们的方向前进,朋友们可以成为会员。祝你好运!