SQLite 数据库问题,设计问题(indexing/multiple 字段)

SQLite database questions, problems with design (indexing/multiple fields)

我经常使用 Whosebug,但这是我的第一个问题,所以如果我做错了什么,请告诉我。我不是程序员(我只是根据自己的需要进行编程)所以我愿意接受教程建议等。如果你给我一些东西让我自己阅读并找到答案,我不会被冒犯。

好的,直截了当 - 我正在尝试编写简单的应用程序来跟踪我的个人开支,但我在数据库设计方面遇到了问题。我正在使用 VStudio 创建数据库 (SQLite)。我在设计中附上了一张图表,我有一些问题。

My SQLite diagram

不知道具体怎么设计"Transactions"table。日期、付款类型等字段似乎很简单,但我的想法是在此 table 中存储有关交易的信息,因此我需要在那里存储多个产品。我已经阅读了它并创建了 table "Transactions_Products" 来帮助解决这个问题。我的问题是:我应该把交易中的产品数量放在哪里?我想不出放它的地方。我试图找到类似的数据库,但找不到任何东西。

第二件事。我已经阅读了很多关于索引的内容,但我仍然无法理解这个想法。我不知道什么时候使用它。我应该只在我经常 "querying" 的字段上使用它吗?

最后一个 - 这么小的应用程序只为我自己存储我的帐户余额更好吗?table还是我应该每次都计算它?

正如我所说,我不需要像 "do this, do that" 这样的答案。如果你给我一些好的 tutorials/articles 我想我可以自己找到答案,但我找不到。可能是我找错了。

提前感谢您提供任何信息。

where do I put quantity of products in the transaction?

Transactions 是一个糟糕的 table 名称,因为它含糊不清并且具有多重含义。考虑 "payments"、"purchase invoices" 等。请参阅 https://dba.stackexchange.com/questions/12991/ready-to-use-database-models-example/23831#23831 了解一些现有模式。

Should I use [indexes] only on fields that I will be "querying" a lot?

天下没有免费的午餐。索引占用 space,并且会减慢插入速度。从主键上的索引开始(这是 SQLite 的默认设置),测量速度慢的部分(查看查询计划)并在它们有帮助且有空间时添加索引。

is it better for such a small application just for myself to store my account balance in a separate table or should I just calculate it every time?

对于您描述的 operational/transactional 数据库,请避免存储计算值。 SQLite 可以快速计算数字:)

过早的优化是不成熟的。首先通过完全规范化使其工作。如果您遇到性能问题,请分析真正导致速度下降的原因,然后从那里着手。