Ok, so I am an accountant (Canada), and I also have a master’s degree in computer engineering and worked in that field for several years before switching to accounting.
I think its a brilliant idea to bring accounting to Nextcloud. I agree that it is a perfect fit.
HOWEVER, I think the idea of using plain text files for the database is a non-starter. Right off the bat, you’re making certain that you are limiting the scope of what you can accomplish.
You don’t seem to be providing an adequate argument against using a database. I agree that a proprietary database is terrible and frustrating, but a well defined and documented OPEN database would be very helpful. As for a database being rigid, well naturally. As your text file must be as well in order to reliably read and use it. The rigidity isn’t a weakness, it is a guarantee that relationships will be maintained without failure – this will ensure that your data isn’t destroyed.
Now of course, I’m all for being able to EXPORT the data in the database into a plain text file. That is actually a useful feature that allows the data to be shared with your accountant, who more often than not doesn’t use the same software as you do
The bottom line is this; what you are proposing boils down to actually building your own relational database using text files as the data storage back end. All data in any relational database can be represented in that way already, think CSV files. Any table can be exported in its entirety to a CSV file. So the question then is this; if that is the case, then WHY do we bother with database servers like MariaDB with binary table formats like InnoDB? The answer is complex, but some of the reasons are these;
- indexes help with data access performance – rather than having to search manually through a huge text file, we can use shortcuts to get to the data we need quickly.
- multiple users can share a single database when arbitration is provided by a database server. This is something you can’t safely do with text files, if you have 2 users in the text file at the same time, whichever user saves the file LAST wins, whereas the database server will ensure that transactions are entered into the database in order and without obliterating prior entries.
- the database guarantees correct data types in all columns, you can’t accidentally put a string into an integer column. It also guarantees that the values entered are reasonable for the context, and that you don’t miss required columns.
- databases allow you to perform complex queries with ease, such as joining tables and restricting results. I can’t even describe how complicated that would be to replicate with plain text.
I’ll give you a really simple example of number 2 killing your data; say you have your plain text database file located in a group folder, and 4 members of your bookkeeping/accounting staff have access to it. George is entering a purchase of $10,000 worth of raw materials for the manufacturing of widgets, and Gracie is entering a sale of 5,000 widgets at $10 each. Because it is a plain text file, they both have the file loaded into memory at the same time. First George enters the purchase transaction and saves the file, then Gracie enters the sales transaction and saves the file again. Because the file was in Gracie’s memory, and that memory didn’t include George’s purchase transaction, as soon as Gracie hits the save button, George’s transaction is basically DELETED. That’s not something you want to have happening to your precious accounting data, and is probably the MOST IMPORTANT reason why accounting data MUST be stored using a transactional database.
Now remember, if you want to be able to access your stored data as a plain text file, all you need is to have an export button that select’s all data from the database and writes it to a plain text file, and there is no limit to the formats you can export it in, so there is no risk of loosing touch with your data.
I would be thrilled to participate in this project, but if I am going to, then it absolutely has to become something that I can recommend to my own clients, or maybe even offer the service to my clients using my own server.