我是 Rails 的新手,正在尝试弄清楚如何创建模型来跟踪我的应用程序中的收入和支出。我是不是该:
1)创建一个名为Finance的模型和数据库表,然后将一个名为“type”的字段设置为收入或费用,然后继续描述,金额,日期?
2) 或者我应该创建两个模型和两个名为收入和费用的表,每个表都有描述、金额和日期?
我打算使用这些数据让摄影师跟踪与他们的业务相关的收入和支出。因此,例如,当摄影师预订约会时,他们可以将收入和支出与该约会相关联。他们还可以查看显示每月收入、支出和利润的报告。
我是 Rails 的新手,正在尝试弄清楚如何创建模型来跟踪我的应用程序中的收入和支出。我是不是该:
1)创建一个名为Finance的模型和数据库表,然后将一个名为“type”的字段设置为收入或费用,然后继续描述,金额,日期?
2) 或者我应该创建两个模型和两个名为收入和费用的表,每个表都有描述、金额和日期?
我打算使用这些数据让摄影师跟踪与他们的业务相关的收入和支出。因此,例如,当摄影师预订约会时,他们可以将收入和支出与该约会相关联。他们还可以查看显示每月收入、支出和利润的报告。
我会说一张桌子并使用STI(即使用类型字段)。收入和支出本质上是一回事,只是操作的“方向”不同。所以对我来说,使用相同的数据模型是有意义的,例外隐藏在特定的子类型中。
现在至于另一个答案中提到的问题:
这基本上只是一个偏好问题。您可以使用一个或两个表执行所有数据库查询(使用 UNION)。所以我更喜欢两张表有一个更清晰的模型结构。您想要的图像,因此保存收入条目:
但是我可以想象一个数据库查询,它可以(!)只使用一个表来更快:
ORDER
两种类型,让我们按日期说。还有一点是一张桌子更好,但这不适用于您的模型:
对于其他一切,两个单独的表更好。关于查询性能:
深入了解 DBMS,还有另一个使用两个表的原因:
ORDER
我会用两张桌子来看看这个东西。也许我错了,性能影响甚至不存在。
我创建了三个简单的表(使用 MySQL):
inc
: id
(int, PK), money
(int, not null)exp
: id
(int, PK), money
(int, not null)combi
: id
(int, PK), type
(tinyint, index, not null), money
(not null)然后用随机数据填充表格:
money
: 从 1 到 10000type
: 从 1 到 2inc
: 100000 个条目exp
: 100000 个条目combi
: 200000 个条目运行这些查询:
SELECT id, money
FROM combi
WHERE money > 5000
ORDER BY money
LIMIT 200000;
0,1 sec ... 无索引:0,1 sec
SELECT * FROM (
SELECT id, money FROM inc WHERE money > 5000
UNION
SELECT id, money FROM exp WHERE money > 5000
) a
ORDER BY money LIMIT 200000;
0.16 秒
SELECT id, money
FROM combi
WHERE money > 5000 && type = 1
ORDER BY money
LIMIT 200000;
0,14 秒 ... 无索引:0,085 秒
SELECT id, money
FROM inc
WHERE money > 5000
ORDER BY money
LIMIT 200000;
0.04 秒
你可以看到预期的结果:
但我不明白:为什么查询type = 1
速度这么慢?我认为使用索引会使它几乎等于快?