I recently asked two questions: (1) how to store and connect partial records in two or more machines, with the record halves correctly associated, and (2) how to determine the increase in time/space complexity due to the use of remote databases/multiple machines. The responses didn't really address the heart of the issue, so I'd like to clarify my questions:
First, I'm not asking if I should do this but rather the best way to do it. For example, I want to store a huge family tree with info such as date of birth (DOB), place of birth, mother's maiden name, citizenship/immigration status, ethnic/religious affiliation, and so on for each member, but I want to partition that info across databases (and machines) to reduce the amount of personally identifiable information (PII) exposure that would occur through the breach of a single machine.
This security measure is not replacing the standard safeguards of encryption, etc. but rather is in addition to them. The issue is that databases with those safeguards already in place have still been hacked (recent examples are the Anthem breach, OPM breach, etc.), so, clearly, "standard" isn't enough.
Data replication is not an option; I do not want any server to store the full data from the records at any time. A proxy server may aggregate the data during a query, but at no time should any server actually store the full record. The records queried will obviously be stored at the client side, but if a client is hacked, the only records exposed are those actually queried, not the millions of others that a server might store.
So I'm looking for the best, most efficient way to partition the data found in a record while ensuring that all parts of the record are linked in a query. Example: I create personal records containing DOB, place of birth, mother's maiden name, citizenship status, ethnic/religious affiliation, and medical information, but only the DOB and citizenship status are stored in the tables contained in database 1. Then database 2 contains tables with medical information and mother's maiden name, and so on. The databases are on separate servers so that if one machine is hacked, only that part of the record is accessed.
As a client, if I pull a record, I want to acquire all information about a single entity, but as noted above, I don't want to store all of the info of any record in a single database or server.
Does anyone have suggestions for the best ways to do this? I'm also interested in how to test the increase in time/space complexity due to the use of remote databases/multiple machines.