A relational database uses tables for minimal amounts of information. So as you say there would be an entity for people maybe called individuals and then a table for transactions, along with possibly companies, company addresses called co_address, home addresses called ho_address and so on.
What makes it relational is that you can set up relationships between the tables.
So with :
individuals : id int() primary key auto_increment, last_name and firstname both of varchar(), then maybe a birthdate as an extra identiifier, and these last three would be a unique key to prevent duplicate entries
Often an account number would be the idnividual ID
transactions : id int() auto_increment, description unique key
companies : id int() primary key auto_increment, name varchar() unique key
co_address : an int() primary and all the address fields
ho_address : same as above
you would also have an indiv_address table which was simply 2 fields, a list of individual_id against ho_address_id, then a comp_address with companies_id against co_address_id
This way a person can be linked to more than one address, allowing for people with multiple homes. One major company can have hundreds of links against their site addresses. Each described transaction would be a description (maybe sales) and an ID, but might include a field to hold the id form a void transaction with links it to a table of reasons for voiding and void date.
A transaction link table would include the transaction_id, the indiv_id and a date, with a primary key of id which would be int() auto_increment type and a date.
Each transaction could be looked up against the person, the date and the ID of the resulting transaction can then look up the sale cost, the quantity and a partcode.
These links form the relationship, nothing to do with how it is displayed or grouped. There is not even a need to use foreign keys as such, when you write a query it can include linking a company to a site address and this makes the site address primary key the foreign key from the companies table.
This way no record ever leaves you in a difficult situation when something changes. An individual could change their name as in marrying and you simply change it once in the individual table, a price may change in a stock table and would reflect all pending transactions, but all previous transactions would be linked to an invoice parts table which is again linked or relates to invoices.
Very complicated to keep track of when setting it up, very easy to create queries or groups of queries which will ALWAYS return consistent results. One change reflects in results from all the tables.