我正在尝试建立一个数据库来管理人与人之间的费用。我想要一张桌子,我可以节省每人花多少欧元。
我有一个名为people的表,它只有两列,_id和name。
然后我尝试创建一个包含_id,总金额的表格,并节省了每个人花了多少欧元。我正在考虑用他的_id为每个人写一个专栏,并且花了多少欧元,但我不知道该怎么做。
例如:
或许我可以使用一些列来存储id和金额,如下所示: (这是相同的例子)
提前谢谢!
答案 0 :(得分:1)
你在那里建议两个单独的SQL反模式。一个是由另一个表命名的列,另一个是blah_1
,blah_2
,...系列列。在每种情况下,他们都表明你正在考虑这个错误; 数据库不是电子表格。
最好有一个表记录事务ID,人员ID和花费的数量之间的唯一映射(为了清楚起见省略_id
):
txID | personID | spend
-----+----------+-------
1 | 1 | 10
2 | 1 | 5
2 | 2 | 10
3 | 2 | 10
3 | 3 | 10
4 | 1 | 4
您需要指定txID
和personID
的组合是唯一的,但不是任何一列本身都是唯一的。< / SUP>
现在,并不是说你已经失去了任何人花费的金额或其他类似的基本汇总信息。然后,您可以使用以下查询导出事务中花费的总金额:
SELECT SUM(spend) AS "Total amount" FROM spendTable WHERE txID = 2
但是,你也可以做一些事情,比如找出一个人花了多少钱:
SELECT SUM(spend) FROM spendTable WHERE personID = 1
这样的查询是完全合理的,并且使用您提出的第二个表格设计会更加困难。 (第一种设计会更好,除非你实际上可以通过外键关系明确地与PEOPLE
表链接,这会使你的事情很多更加棘手开始做更复杂的事情。)