Dear Matthew,

The difference between a relational database and a hierarchical one (or, for that matter, a polymorphic one like FileMan) has to do with how it models the world.

All databases exist to record an abstract model of pieces of the world. Databases are usually structured as files (or tables or classes), each of which lists entities of a similar kind, such as patients, or drugs, or visits. Just as the file represents a category of entities, so each record (or entry or row or object or instance) in that file represents a specific entity, such as a specific patient, a specific drug, or a specific visit. Databases, files, and records are not the real things they represent, only abstract representations of them. An entry in the patient file is not a real patient, but an abstraction of a patient, a metaphor for that patient. Very much as with poetry, the more closely that metaphor matches the important parts of the real thing it represents, the more powerful the metaphor, the more meaningful, and from the perspective of medical informatics, the more likely it is to assist in improving patient health. Whether you have the right information and whether you have organized it into the right metaphor is largely dictated by how that information will be used--that tells you which operations can be inefficient and which need to be efficient, which tells you how to balance the tradeoffs that are always involved.

A good database designer chooses apt metaphors that match well the kinds of information the clients need to record. The strategic part of that choice involves selecting the right database paradigm; the tactical part is using that paradigm effectively. WHICH data a file records is up to the file designer, but HOW that data is stored is up to the database paradigm you choose (relational, hierarchical, network, polymorphic, object-oriented, etc.). As with successful adaptation in nature, the secret to success lies not with rigid orthodoxy but with responsive flexibility, varying your approach to let each problem dictate its own best solution.

Relational databases represent files as tables, records as rows, fields as columns. This is the spreadsheet's view of the world. In truth, spreadsheets are excellent for certain categories of problems (e.g., inventories of parts), and terrible for others (e.g., Beethoven's Pastorale piano sonata). The relational database is no more the perfect solution to every problem than is the hammer. Neither is it the wrong solution for every problem. It must be used appropriately, to solve those problems for which it is well-suited.

Relational purists, those who insist every database problem must be solved relationally, love the reductionist simplicity of having only a single metaphor for all problems, and argue that by reducing all problems to this common form you increase interoperability. This assertion is false. When used universally and rigidly, the relational metaphor becomes a Procrustean bed, stretching short people and cutting off the legs of tall people so they all fit "perfectly" in the same size bed. A relational solution is most apt for atomic information bound by simple keys, or for groups of such entities likely to be sorted different ways at different times, in which there is no clear way they are usually organized. It is weak at representing asymmetrical relationships, and does not represent behavior at all (making it incompatible with the object-oriented approach to modeling the world has increasingly favored over the last quarter century). The things left out of the relational model are just as important to creating a good model as are the things it includes, and often turn what may appear to be the trivial problem of making two relational systems share data into a nightmare of hidden assumptions and missing relationships.

Monomaniacal devotion to the relational model (or any one technology) is based on the common but erroneous belief that most software problems are technological problems, that using a common technology removes the most important barriers. In actuality, software is a human communication and relationship problem far more than a technical one, consisting of struggling to understand and communicate our needs, first to each other, then to the computer and whoever maintains the code over the decades that follow. Arguing that common use of a relational model solves interoperability is like arguing that world peace has been solved by having all human beings share the same DNA; the proposed solution does not match the context of the problem.

FileMan is a polymorphic database management system. You can use a relational approach when that is appropriate, hierarchical when that is, and so on. It does not fully implement any of these paradigms, but it does enough of most of them to give us a reasonable solution to most the database problems we have faced over the last twenty-eight years.

In VistA, one place we use a relational model is for information relating to visits, because the priority of the relationships among the many visit-related entities is roughly symmetrical--you are just as likely to look up visits by date as you are by patient or by doctor or by any of a number of other things. Since no one of these entities is the clear majority choice for how to organize the rest, we flatten them all into a collection of separate V files that all point to the shared Visit file. As is often the case with relational solutions, this is as flexible as possible, but using the resulting files is then labor-intensive, since the software or users must correctly combine the files they need to get the right results. This was a good use of the relational model by Indian Health Service in RPMS, which the VA had the good sense to adopt into VistA.

One place we use a hierarchical model is for information relating to the menus a user can choose from. To simplify a bit from reality, in VistA all options are collected into menus, which may themselves be collected into other menus and so on; the resulting structure looks something like a tree. To simplify a bit more, each user is assigned a primary menu that contains all the options she needs to do her job. The software that uses this option information is called MenuMan, and it uses this file to solve several different problems that actually require it to use more than one database paradigm for the same data.

When a user is signed into VistA, MenuMan has to make sure she can reach all the options in her primary menu tree, but only those options. For example, if a user tries to jump to an option, MenuMan has to read the option she wants to jump to and then decide whether that option is indeed somewhere among the options she can reach from her primary menu (and its children, and their children, and so on). This is very much a tree operation, not a table operation, and storing this in relational tables would make MenuMan slow, since it would have to recompute all the interrelationships among the options every time it tried to solve this problem. Instead, MenuMan builds a tree for each primary menu that contains all the interrelationships, and builds an index on that tree to quickly identify 1) which options are contained within each tree, and 2) if so, how do you navigate through the tree to reach those options. A partially hierarchical model is exactly right for this problem, since it is about traversing trees, so that is what VistA uses in its compiled menu trees in the ^XUTL global.

On the other hand, options are also managed individually--locked or unlocked, changes to the menu text, sending out new versions if they are patched, and so on. For this kind of management, an option's location within the compiled menu trees is unimportant. All that matters is being able to quickly and independently find and manipulate each option. For this a relational approach is appropriate, so VistA stores options partially relationally in the Option file. Indeed, although all of the information about each option is stored in the Option file, some of it is stored a second time in the menu trees that VistA copies out of the Option file and reorganizes--the same information is stored both relationally and hierarchically because MenuMan needs it one way for some operations but not others. This is more or less the right solution to MenuMan's problems, but the software industry's warring camps would instead choose to twist the solution one way or the other to make it fit their ideological loyalties. The VistA way is not to take one side or the other nor even to remain neutral, but to advocate an end to the war so the two sides can get on with intermarrying to produce healthier, prettier, and hopefully wiser children.

The software industry has a huge failure rate. It is in the midst of an ongoing, growing, forty-year problem called The Software Crisis, in which as the costs of hardware plummet and the power of that hardware increases geometrically, the costs of software are rising, as is the failure rate. No one has solved or shows any immediate signs of solving this industry-wide dilemma, but everyone who admits to the existence of this crisis claims to have a solution, and all of the solutions are technological. Use SQL and all your troubles will go away. No, use C#. No, use brand X instead. These approaches cannot solve the crisis because none of them deal with the fundamental issues. They all propose that The Software Crisis is a werewolf, so all you need is a magic bullet, which by coincidence they just happen to have with them and are willing to part with in exchange for your savings account. An expensive hammer can indeed solve every problem; it just solves most of them badly, and so do these many technologies-du-jour. Each has a small number of proper uses and a large number of inappropriate uses, and each is proposed to be the only solution you need for entire classes of problems.

When an entire industry is this deluded, you can expect crazy behavior. For example, if the American College of Physician Executives says the state of medical informatics is a disaster, except for VistA, which is great, you can expect the industry to complain as one that no, that cannot be so, for look: VistA is not written in brand X. No matter how bad most medical software is, VistA's success cannot be as interesting as which technologies it uses. Failure according to the prescribed technology is the only permitted option. Succeeding with a technology that everyone agrees cannot work must be a mirage. Look away, before the VistA heathens corrupt you with their non-brand-X ways.

So let me play Ariadne to your Theseus and offer you the golden clew with which to escape the labyrinth: ignore technology; focus on features. The short answer to whether you should choose a relational or hierarchical model is: don't. Forget about technology. Leave that to the programmers. Focus instead on the problems you are trying to solve, the features you want, the kinds of information you need. That is by far the harder problem, and something the technologist cannot do for you. If instead you focus on the technology, not only are you artificially constraining the solution (thus increasing the chances of failure) but also neglecting the harder problem that only you can do (thus ensuring failure).

Yours truly,
Rick

PS: "Short" answers to your other questions:

1) Is Mumps a serious limitation to complete EHR functionality, code
maintainence, HL7, or PMS interfacing?

How many completely functional EHRs can you name that are not written in MUMPS, whose functionality even comes close to VistA's? As far as I know, MUMPS is the only programming system designed specifically for medical systems development. Standard MUMPS cannot be used to generate sophisticated graphical interfaces, but it can be used to communicate with programming languages that do. No language does all things, nor should, nor can. Programming requires mastery of multiple languages, and the core language must be carefully chosen. The best reason for using Standard MUMPS as VistA's core language is that it is decades too late to do anything else. VistA is already written in Standard MUMPS, and it took twenty-eight years to get this far. Replacing Standard MUMPS at this point is an irresponsible waste of resources that could instead be used to easily extend VistA to save lives. It is like arguing that brick is passe, so we should shut down New York City for fifty years so we can remove all the brick and replace it with something more popular. Replacing Standard MUMPS to improve code maintenance (for example) is like replacing my DNA so I can learn to play the flute--unnecessary and irrelevant. Standard MUMPS is VistA's DNA.

Honestly, though, why does anyone who is not a programmer care what it was written in? What is Mac OS X written in? How about Microsoft Word? Google? Quicken? The Sims? Do you feel competent to evaluate which programming language is ideal for a given problem domain? After twenty-one years of programming practice and study, I do not know beyond my chosen field of medical software. I certainly do not feel competent to choose among surgical instruments. I could spend time trying to teach nontechnical people how to evaluate programming systems enough to understand why VistA had to be written in Standard MUMPS (something even most programmers evidently do not understand), or they could spend a fraction of that time teaching me what they need VistA to do for them. If I can get VistA to do all those things for them, then in the end who cares what language it is written in?

3)How hard is it for non-Mumps IT personnel to learn Mumps/VistA and are
there enough experienced VistA programmers (or former VistA programmers)
to consult or be hired to non-VA projects?

It is easy to learn Standard MUMPS, but impossible to master VistA. Like the art of medicine itself, VistA is complex beyond human comprehension--no, I am not kidding or exaggerating--and no one person will ever know it all anymore. I have been programming with VistA for twenty-one years; there are a couple areas of the code I know better than anyone, several I know as well as the other experts, and a dozen or so I know reasonably well--out of 80-120 software packages, depending on where you draw the lines. Most of VistA I know by its patterns and common structures, and maybe a few basic architectural features per package, but for most of VistA I am the wrong person to go to. There are whole packages I know only by name, whose purpose I can only guess at. So it is with all the VistA gurus. None of us pretends to know it all or even most of it. We work together as a community, sharing out the vast scope of work that is VistA among ourselves.

To address your central concern, our tradition is to grow our own new Standard MUMPS and VistA programmers from among its users, because we have discovered it is far easier to teach a nurse to program than to teach a programmer to practice medicine; the nurse has already mastered the difficult part. It takes mere minutes to start writing Standard MUMPS code, as with any programming system worth discussing, but a day or two to introduce the basics, a week or two to introduce them fully, and a month or two to become fully comfortable with the programming system. It takes experienced programmers longer to learn Standard MUMPS, because it is not like most other programming systems, and they spend years whining about it instead of buckling down and coming to grips with it on its own terms. Learning Standard MUMPS is like taking small steps over very deep crevices; it is easy but unnerving for some.

Learning to program with VistA takes longer, and should happen in two phases. First the programmer needs to learn our programming standards and conventions and common calls. Then the programmer needs to pick a package and focus on it for a long time, moving from simple assignments to more complex ones. It is best if the student began as a user of that package, then graduated to being an application coordinator (a kind of super-user) for it, before learning to program with it. Becoming an expert user of any reasonably sophisticated VistA package takes years. Once an application coordinator starts training to become an information manager, starts working on supporting and extending a package at a site, every year they keep at it improves their skills with the package measurably. Those who have worked with a package for ten years or more are easy to tell apart from those who have only been doing it a few years.

There is a lot more I could tell you about the expertise lifecycle, how it is structured, where to find VistA experts and how to grow your own, but I am trying to keep this postscript "short."

4) What other concerns should we have regarding adopting VistA?

Above all, it is a serious commitment. It is free as in freedom, not free beer. It will save lives, not time. You cannot do this alone; you may think you can, but sooner or later you will run aground without help. To succeed with VistA you need the community in ways you cannot imagine, but the good news is they will welcome and help you, and it will not be long before you can return the favor. The big hurdle with VistA is that anyone used to making medical informatics decisions has learned how to prepare for defeat, to choose vendors on the basis of how deep their pockets are (so you can sue them when the project collapses in failure) instead of on the basis of their expertise and customer service, to choose based on marketing flair and reputation. VistA is the real deal, and for that very reason may be difficult to recognize as such by customers who have learned only how to choose among flashy failures. VistA requires the "customer" to become a partner, a collaborator, words that have all but lost their meaning in the modern marketplace; when you become fully engaged with the VistA lifecycle, you will come to understand that if VistA is broken it is your fault as much as ours, that it is your responsibility to hold the developers and the software to a high enough standard to meet your needs. Unlike with most commercial software products, you will rewarded instead of punished for engaging in the critique, review, and even development of VistA.

There is an endless amount to learn about it, and it is under continuous development, continuously patched, continuously changing, as it must be. The static details of VistA are less important than the living process by which its users drive development through their continuous stream of suggestions and complaints. You will not and cannot appreciate how true that is until after you have been involved with VistA for years. The secret to its success is no secret, not specific features, nor the technology used. It is the dynamic, hyperactive software lifecycle that engages the creativity of tens of thousands of users to mold the software over and over so that the longer you wait the better it gets, as opposed to most software which is static by design, updated at best occasionally, and obsolesces with time.

That inversion of the norm, emphasizing change instead of stasis, is a repudiation of the core beliefs of the software industry and much of academia, and as such you must expect to hear an endless stream of irrelevant complaints lodged against VistA, usually by those who have not used it. From those who do use VistA, you will generally find an endless stream of relevant complaints together with strong loyalty. Like any experienced VistA professional, I can and will criticize VistA up one side and down the other for hours on end. We like it in part because we know its faults, and so we try to prioritize the work most important to us; when the lifecycle is healthy, if something is broken it's because we think it's more important for the developers to work on something else first. Those who fully engage in the VistA lifecycle know VistA's flaws far more intimately than its critics, but they know its strengths, too, and they can point to features in the software that they personally first brought to the attention of the VistA development community. In a way most software will never be, VistA really does belong to its users, and they know it.

So when I echo other writers in saying VistA is free as in freedom, I mean as in the responsibility that comes with true freedom, the expectation to interact with it as an adult, taking responsibility for what we need from it, and helping to chart our own future. To be blunt, many people do not want that, prefer the simplicity of having limited choices imposed upon them by someone more powerful, to recreate the false security of childhood. Others do not mind the responsibility, but cannot spare the time to learn a fully featured medical informatics system, not even just the few parts of the few packages they would use in their medical roles. In general, we find the truth about VistA properly screens our potential clients; the right people respond well to the challenge and possibilities of VistA, and enrich the community and its software when they engage with us.

PPS: If I sound opinionated in the above, it is because experience has made me so. For the first half of my career with VistA, I thought it was probably nothing special, that every hospital system must have something comparable. My disgust with the state of the art and appreciation for VistA has accumulated over the years through a series of disillusioning exposures to how most medical software works--or doesn't. I do not know if there is even one feature in VistA that it does better than any other system, but no other system seems to be able to combine them all into such an integrated architecture driven by such a potentially responsive software lifecycle. The experience of patients in New Orleans in the wake of Hurricane Katrina would seem to be the latest dramatic illustration. I have gradually arrived at the surprising conclusion that my friends and I are working on something unusually cool. Who knew?

Aylesworth Marc A Ctr AFRL/IFSE wrote:

Relational DBs always reserve the total space for a record for faster
searching. That is why when creating a db you have to tell the DB what type
and size of each field is.
Thanks

Marc Aylesworth

C3I Associates
AFRL/IFSE

Joint Battlespace Infosphere Team

525 Brooks Rd

Rome, NY 13441-4505

Tel:315.330.2422

Fax:315.330.7009

Email: [EMAIL PROTECTED]

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Gregory
Woodhouse
Sent: Monday, September 19, 2005 3:06 PM
To: hardhats-members@lists.sourceforge.net
Subject: Re: [Hardhats-members] Re: Wiki additions: [was: web evaluation
tool]

This is actually not true. flat tables are the abstraction presented to the user (or programmer) with relational databases, but the underlying storage model is, more likely than not, based on B-trees, just as it is in MUMPS. This can be confusing, because the basic abstraction presented to the user in MUMPS is multi-branching trees, but that abstraction is not the same as the underlying storage model.

===
Gregory Woodhouse
[EMAIL PROTECTED]

"The most incomprehensible thing about
the world is that it is at all comprehensible."
 --Albert Einstein (1879-1955)


On Sep 19, 2005, at 11:56 AM, Kevin Toppenberg wrote:

2) What is the fundamental difference between a relational database and
a hierarchical database and how does that effect the end-user? (Should
we even care? If so why?)

Another difference is the way the data is stored.  M data is stored in
b-trees, as compared to flat tables (I believe).  This leads to faster
data acess, and less CPU power needed.

Also, the database in M is called by some a "sparce array."  This
means that there are no "blank spaces" left for data to be later
filled into.  So with M, if there is no data present, then no space is
wasted.  I find this to lead to many many fields being defined for a
given file.  With a traditional database, having all these fields with
empty/wasted space, would lead to huge database files.  But with M,
one can can store years of patient information on a relatively small
disk.



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Hardhats-members mailing list
Hardhats-members@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hardhats-members

Reply via email to