After thinking more about it, I think that the optimal suggestion (in the sense that I want you to consider that my only suggestion from now on) is to have one document for each patient visits to the pharmacy, as Sebastian said.
The document structure could be something like this <http://pastie.org/10103158>. At every visit, even if nothing happened on that visit, you would have a new document with all the current "state" information about the patient. It would list all the drugs being continuously taken, drugs that were stopped (after they being "stopped" in one document, they would not appear in the next documents), even drugs the patient reported to be taking before the first visit, or that he is taking because they were prescribed elsewhere. The GUI interface should, them, get the last document for each patient, and display the "current state" for the pharmacist, who can ask about all the drugs, for example: "are you still taking xyz?", if the patient forgets about it. Then all the updates the pharmacist makes on the screen can be saved just as they are, but AS A NEW DOCUMENT, old documents should be considered as immutable (maybe editable only in case of error). Information about the patients (as you said you want to track reactions considering age, gender and other things) could be then emitted as you like. For example, for querying stopped drugs of some type for patients with ages between 24 and 34, you would have a view emitting keys like this: [phase, drug type, patient's age], and a result like this <http://fiatjaf.alhur.es/couchdb-mr-simulator/#{"params":"reduceFn: _count\nreduce: true\ngroup_level: 3\nstartkey: [3, X, 24, null]\nendkey: [3, X, 34, {}]","emitted":"# key: phase, drug type, patient age\n# value: drug name\n1, X, 21, Xoliryi-43\n1, A, 29, Aaayol-43\n1, Y, 24, Yaayol-43\n2, A, 22, Aaayol-43\n3, Y, 22, Yoliryi-43\n3, X, 39, Xoliryi-43\n1, A, 49, Aoliryi-43\n1, Y, 24, Yeeeu-43\n2, A, 32, Aeeeu-43\n2, A, 33, Aaayol-43\n2, X, 44, Xaayol-43\n3, Y, 22, Yaayol-43\n2, A, 43, Aoliryi-43\n1, Y, 31, Yoliryi-43\n2, X, 22, Xoliryi-43\n2, X, 23, Xoliryi-43\n2, X, 44, Xoliryi-43\n2, A, 23, Aeeeu-43\n3, A, 34, Aaayol-43\n1, Y, 21, Yaayol-43\n2, X, 22, Xaayol-43\n2, X, 23, Xaayol-43\n2, X, 24, Xaayol-43\n3, Y, 22, Yaayol-43\n3, X, 29, Xaayol-43\n1, A, 49, Aaayol-43\n1, Y, 24, Yaayol-43\n2, A, 22, Aoliryi-43\n2, X, 24, Xeeeu-43\n3, A, 34, Aoliryi-43\n1, Y, 21, Yoliryi-43\n1, Y, 21, Yoliryi-43\n3, Y, 22, Yeeeu-43\n2, X, 22, Xoliryi-43\n2, X, 23, Xoliryi-43\n2, X, 14, Xoliryi-43\n3, Y, 22, Yaayol-43\n3, X, 29, Xaayol-43\n2, X, 22, Xoliryi-43\n2, X, 43, Xoliryi-43\n2, X, 44, Xoliryi-43\n3, Y, 22, Yoliryi-43\n3, X, 29, Xoliryi-43"}>. Now, if you wanted to get the results discriminated by the drug name, the query would be this <http://fiatjaf.alhur.es/couchdb-mr-simulator/#{"params":"reduceFn: _count\nreduce: true\ngroup_level: 4\nstartkey: [3, X, 24, null]\nendkey: [3, X, 34, {}]","emitted":"# key: phase, drug type, patient age\n# value: drug name\n1, X, 21, Xoliryi-43\n1, A, 29, Aaayol-43\n1, Y, 24, Yaayol-43\n2, A, 22, Aaayol-43\n3, Y, 22, Yoliryi-43\n3, X, 39, Xoliryi-43\n1, A, 49, Aoliryi-43\n1, Y, 24, Yeeeu-43\n2, A, 32, Aeeeu-43\n2, A, 33, Aaayol-43\n2, X, 44, Xaayol-43\n3, Y, 22, Yaayol-43\n2, A, 43, Aoliryi-43\n1, Y, 31, Yoliryi-43\n2, X, 22, Xoliryi-43\n2, X, 23, Xoliryi-43\n2, X, 44, Xoliryi-43\n2, A, 23, Aeeeu-43\n3, A, 34, Aaayol-43\n1, Y, 21, Yaayol-43\n2, X, 22, Xaayol-43\n2, X, 23, Xaayol-43\n2, X, 24, Xaayol-43\n3, Y, 22, Yaayol-43\n3, X, 29, Xaayol-43\n1, A, 49, Aaayol-43\n1, Y, 24, Yaayol-43\n2, A, 22, Aoliryi-43\n2, X, 24, Xeeeu-43\n3, A, 34, Aoliryi-43\n1, Y, 21, Yoliryi-43\n1, Y, 21, Yoliryi-43\n3, Y, 22, Yeeeu-43\n2, X, 22, Xoliryi-43\n2, X, 23, Xoliryi-43\n2, X, 14, Xoliryi-43\n3, Y, 22, Yaayol-43\n3, X, 29, Xaayol-43\n2, X, 22, Xoliryi-43\n2, X, 43, Xoliryi-43\n2, X, 44, Xoliryi-43\n3, Y, 22, Yoliryi-43\n3, X, 29, Xoliryi-43"}>.
