<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vistapedia.com/index.php?action=history&amp;feed=atom&amp;title=What_Is_A_Polymorphic_Database</id>
	<title>What Is A Polymorphic Database - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://vistapedia.com/index.php?action=history&amp;feed=atom&amp;title=What_Is_A_Polymorphic_Database"/>
	<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=What_Is_A_Polymorphic_Database&amp;action=history"/>
	<updated>2026-05-02T13:24:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vistapedia.com/index.php?title=What_Is_A_Polymorphic_Database&amp;diff=14328&amp;oldid=prev</id>
		<title>NeilArmstrong: Added glossary link to Record~</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=What_Is_A_Polymorphic_Database&amp;diff=14328&amp;oldid=prev"/>
		<updated>2012-03-10T22:03:24Z</updated>

		<summary type="html">&lt;p&gt;Added glossary link to Record~&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:03, 10 March 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;models the world.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;models the world.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All databases exist to record an abstract model of pieces of the world.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;All databases exist to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;record&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;~|Record]] &lt;/ins&gt;an abstract model of pieces of the world.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Databases are usually structured as files (or tables or classes), each&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Databases are usually structured as files (or tables or classes), each&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;of which lists entities of a similar kind, such as patients, or drugs,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;of which lists entities of a similar kind, such as patients, or drugs,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;or visits.  Just as the file represents a category of entities, so each&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;or visits.  Just as the file represents a category of entities, so each&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;record (or entry or row or object or instance) in that file represents a&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;record&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;~|Record]] &lt;/ins&gt;(or entry or row or object or instance) in that file represents a&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;specific entity, such as a specific patient, a specific drug, or a&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;specific entity, such as a specific patient, a specific drug, or a&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;specific visit.  Databases, files, and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;records &lt;/del&gt;are not the real things&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;specific visit.  Databases, files, and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[record~|Record]]s &lt;/ins&gt;are not the real things&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;they represent, only abstract representations of them.  An entry in the&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;they represent, only abstract representations of them.  An entry in the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;patient file is not a real patient, but an abstraction of a patient, a&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;patient file is not a real patient, but an abstraction of a patient, a&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l23&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A good database designer chooses apt metaphors that match well the kinds&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A good database designer chooses apt metaphors that match well the kinds&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;of information the clients need to record.  The strategic part of that&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;of information the clients need to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;record&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;~|Record]]&lt;/ins&gt;.  The strategic part of that&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;choice involves selecting the right database paradigm; the tactical part&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;choice involves selecting the right database paradigm; the tactical part&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;is using that paradigm effectively.  WHICH data a file &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;records &lt;/del&gt;is up to&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;is using that paradigm effectively.  WHICH data a file &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[record~|Record]]s &lt;/ins&gt;is up to&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the file designer, but HOW that data is stored is up to the database&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the file designer, but HOW that data is stored is up to the database&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;paradigm you choose (relational, hierarchical, network, polymorphic,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;paradigm you choose (relational, hierarchical, network, polymorphic,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;best solution.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;best solution.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Relational databases represent files as tables, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;records &lt;/del&gt;as rows, fields&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Relational databases represent files as tables, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[record~|Record]]s &lt;/ins&gt;as rows, fields&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;as columns.  This is the spreadsheet&amp;#039;s view of the world.  In truth,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;as columns.  This is the spreadsheet&amp;#039;s view of the world.  In truth,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;spreadsheets are excellent for certain categories of problems (e.g.,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;spreadsheets are excellent for certain categories of problems (e.g.,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>NeilArmstrong</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=What_Is_A_Polymorphic_Database&amp;diff=9658&amp;oldid=prev</id>
		<title>152.131.9.69 at 15:16, 20 September 2005</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=What_Is_A_Polymorphic_Database&amp;diff=9658&amp;oldid=prev"/>
		<updated>2005-09-20T15:16:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The difference between a relational database and a hierarchical one (or,&lt;br /&gt;
for that matter, a polymorphic one like FileMan) has to do with how it&lt;br /&gt;
models the world.&lt;br /&gt;
&lt;br /&gt;
All databases exist to record an abstract model of pieces of the world.&lt;br /&gt;
Databases are usually structured as files (or tables or classes), each&lt;br /&gt;
of which lists entities of a similar kind, such as patients, or drugs,&lt;br /&gt;
or visits.  Just as the file represents a category of entities, so each&lt;br /&gt;
record (or entry or row or object or instance) in that file represents a&lt;br /&gt;
specific entity, such as a specific patient, a specific drug, or a&lt;br /&gt;
specific visit.  Databases, files, and records are not the real things&lt;br /&gt;
they represent, only abstract representations of them.  An entry in the&lt;br /&gt;
patient file is not a real patient, but an abstraction of a patient, a&lt;br /&gt;
metaphor for that patient.  Very much as with poetry, the more closely&lt;br /&gt;
that metaphor matches the important parts of the real thing it&lt;br /&gt;
represents, the more powerful the metaphor, the more meaningful, and&lt;br /&gt;
from the perspective of medical informatics, the more likely it is to&lt;br /&gt;
assist in improving patient health.  Whether you have the right&lt;br /&gt;
information and whether you have organized it into the right metaphor is&lt;br /&gt;
largely dictated by how that information will be used--that tells you&lt;br /&gt;
which operations can be inefficient and which need to be efficient,&lt;br /&gt;
which tells you how to balance the tradeoffs that are always involved.&lt;br /&gt;
&lt;br /&gt;
A good database designer chooses apt metaphors that match well the kinds&lt;br /&gt;
of information the clients need to record.  The strategic part of that&lt;br /&gt;
choice involves selecting the right database paradigm; the tactical part&lt;br /&gt;
is using that paradigm effectively.  WHICH data a file records is up to&lt;br /&gt;
the file designer, but HOW that data is stored is up to the database&lt;br /&gt;
paradigm you choose (relational, hierarchical, network, polymorphic,&lt;br /&gt;
object-oriented, etc.).  As with successful adaptation in nature, the&lt;br /&gt;
secret to success lies not with rigid orthodoxy but with responsive&lt;br /&gt;
flexibility, varying your approach to let each problem dictate its own&lt;br /&gt;
best solution.&lt;br /&gt;
&lt;br /&gt;
Relational databases represent files as tables, records as rows, fields&lt;br /&gt;
as columns.  This is the spreadsheet&amp;#039;s view of the world.  In truth,&lt;br /&gt;
spreadsheets are excellent for certain categories of problems (e.g.,&lt;br /&gt;
inventories of parts), and terrible for others (e.g., Beethoven&amp;#039;s&lt;br /&gt;
Pastorale piano sonata).  The relational database is no more the perfect&lt;br /&gt;
solution to every problem than is the hammer.  Neither is it the wrong&lt;br /&gt;
solution for every problem.  It must be used appropriately, to solve&lt;br /&gt;
those problems for which it is well-suited.&lt;br /&gt;
&lt;br /&gt;
Relational purists, those who insist every database problem must be&lt;br /&gt;
solved relationally, love the reductionist simplicity of having only a&lt;br /&gt;
single metaphor for all problems, and argue that by reducing all&lt;br /&gt;
problems to this common form you increase interoperability.  This&lt;br /&gt;
assertion is false.  When used universally and rigidly, the relational&lt;br /&gt;
metaphor becomes a Procrustean bed, stretching short people and cutting&lt;br /&gt;
off the legs of tall people so they all fit &amp;quot;perfectly&amp;quot; in the same size&lt;br /&gt;
bed.  A relational solution is most apt for atomic information bound by&lt;br /&gt;
simple keys, or for groups of such entities likely to be sorted&lt;br /&gt;
different ways at different times, in which there is no clear way they&lt;br /&gt;
are usually organized.  It is weak at representing asymmetrical&lt;br /&gt;
relationships, and does not represent behavior at all (making it&lt;br /&gt;
incompatible with the object-oriented approach to modeling the world has&lt;br /&gt;
increasingly favored over the last quarter century).  The things left&lt;br /&gt;
out of the relational model are just as important to creating a good&lt;br /&gt;
model as are the things it includes, and often turn what may appear to&lt;br /&gt;
be the trivial problem of making two relational systems share data into&lt;br /&gt;
a nightmare of hidden assumptions and missing relationships.&lt;br /&gt;
&lt;br /&gt;
Monomaniacal devotion to the relational model (or any one technology) is&lt;br /&gt;
based on the common but erroneous belief that most software problems are&lt;br /&gt;
technological problems, that using a common technology removes the most&lt;br /&gt;
important barriers.  In actuality, software is a human communication and&lt;br /&gt;
relationship problem far more than a technical one, consisting of&lt;br /&gt;
struggling to understand and communicate our needs, first to each other,&lt;br /&gt;
then to the computer and whoever maintains the code over the decades&lt;br /&gt;
that follow.  Arguing that common use of a relational model solves&lt;br /&gt;
interoperability is like arguing that world peace has been solved by&lt;br /&gt;
having all human beings share the same DNA; the proposed solution does&lt;br /&gt;
not match the context of the problem.&lt;br /&gt;
&lt;br /&gt;
FileMan is a polymorphic database management system.  You can use a&lt;br /&gt;
relational approach when that is appropriate, hierarchical when that is,&lt;br /&gt;
and so on.  It does not fully implement any of these paradigms, but it&lt;br /&gt;
does enough of most of them to give us a reasonable solution to most the&lt;br /&gt;
database problems we have faced over the last twenty-eight years.&lt;br /&gt;
&lt;br /&gt;
In VistA, one place we use a relational model is for information&lt;br /&gt;
relating to visits, because the priority of the relationships among the&lt;br /&gt;
many visit-related entities is roughly symmetrical--you are just as&lt;br /&gt;
likely to look up visits by date as you are by patient or by doctor or&lt;br /&gt;
by any of a number of other things.  Since no one of these entities is&lt;br /&gt;
the clear majority choice for how to organize the rest, we flatten them&lt;br /&gt;
all into a collection of separate V files that all point to the shared&lt;br /&gt;
Visit file.  As is often the case with relational solutions, this is as&lt;br /&gt;
flexible as possible, but using the resulting files is then&lt;br /&gt;
labor-intensive, since the software or users must correctly combine the&lt;br /&gt;
files they need to get the right results.  This was a good use of the&lt;br /&gt;
relational model by Indian Health Service in RPMS, which the VA had the&lt;br /&gt;
good sense to adopt into VistA.&lt;br /&gt;
&lt;br /&gt;
One place we use a hierarchical model is for information relating to the&lt;br /&gt;
menus a user can choose from.  To simplify a bit from reality, in VistA&lt;br /&gt;
all options are collected into menus, which may themselves be collected&lt;br /&gt;
into other menus and so on; the resulting structure looks something like&lt;br /&gt;
a tree.  To simplify a bit more, each user is assigned a primary menu&lt;br /&gt;
that contains all the options she needs to do her job.  The software&lt;br /&gt;
that uses this option information is called MenuMan, and it uses this&lt;br /&gt;
file to solve several different problems that actually require it to use&lt;br /&gt;
more than one database paradigm for the same data.&lt;br /&gt;
&lt;br /&gt;
When a user is signed into VistA, MenuMan has to make sure she can reach&lt;br /&gt;
all the options in her primary menu tree, but only those options.  For&lt;br /&gt;
example, if a user tries to jump to an option, MenuMan has to read the&lt;br /&gt;
option she wants to jump to and then decide whether that option is&lt;br /&gt;
indeed somewhere among the options she can reach from her primary menu&lt;br /&gt;
(and its children, and their children, and so on).  This is very much a&lt;br /&gt;
tree operation, not a table operation, and storing this in relational&lt;br /&gt;
tables would make MenuMan slow, since it would have to recompute all the&lt;br /&gt;
interrelationships among the options every time it tried to solve this&lt;br /&gt;
problem.  Instead, MenuMan builds a tree for each primary menu that&lt;br /&gt;
contains all the interrelationships, and builds an index on that tree to&lt;br /&gt;
quickly identify 1) which options are contained within each tree, and 2)&lt;br /&gt;
if so, how do you navigate through the tree to reach those options.  A&lt;br /&gt;
partially hierarchical model is exactly right for this problem, since it&lt;br /&gt;
is about traversing trees, so that is what VistA uses in its compiled&lt;br /&gt;
menu trees in the ^XUTL global.&lt;br /&gt;
&lt;br /&gt;
On the other hand, options are also managed individually--locked or&lt;br /&gt;
unlocked, changes to the menu text, sending out new versions if they are&lt;br /&gt;
patched, and so on.  For this kind of management, an option&amp;#039;s location&lt;br /&gt;
within the compiled menu trees is unimportant.  All that matters is&lt;br /&gt;
being able to quickly and independently find and manipulate each&lt;br /&gt;
option.  For this a relational approach is appropriate, so VistA stores&lt;br /&gt;
options partially relationally in the Option file.  Indeed, although all&lt;br /&gt;
of the information about each option is stored in the Option file, some&lt;br /&gt;
of it is stored a second time in the menu trees that VistA copies out of&lt;br /&gt;
the Option file and reorganizes--the same information is stored both&lt;br /&gt;
relationally and hierarchically because MenuMan needs it one way for&lt;br /&gt;
some operations but not others.  This is more or less the right solution&lt;br /&gt;
to MenuMan&amp;#039;s problems, but the software industry&amp;#039;s warring camps would&lt;br /&gt;
instead choose to twist the solution one way or the other to make it fit&lt;br /&gt;
their ideological loyalties.  The VistA way is not to take one side or&lt;br /&gt;
the other nor even to remain neutral, but to advocate an end to the war&lt;br /&gt;
so the two sides can get on with intermarrying to produce healthier,&lt;br /&gt;
prettier, and hopefully wiser children.&lt;br /&gt;
&lt;br /&gt;
The software industry has a huge failure rate.  It is in the midst of an&lt;br /&gt;
ongoing, growing, forty-year problem called The Software Crisis, in&lt;br /&gt;
which as the costs of hardware plummet and the power of that hardware&lt;br /&gt;
increases geometrically, the costs of software are rising, as is the&lt;br /&gt;
failure rate.  No one has solved or shows any immediate signs of solving&lt;br /&gt;
this industry-wide dilemma, but everyone who admits to the existence of&lt;br /&gt;
this crisis claims to have a solution, and all of the solutions are&lt;br /&gt;
technological.  Use SQL and all your troubles will go away.  No, use&lt;br /&gt;
C#.  No, use brand X instead.  These approaches cannot solve the crisis&lt;br /&gt;
because none of them deal with the fundamental issues.  They all propose&lt;br /&gt;
that The Software Crisis is a werewolf, so all you need is a magic&lt;br /&gt;
bullet, which by coincidence they just happen to have with them and are&lt;br /&gt;
willing to part with in exchange for your savings account.  An expensive&lt;br /&gt;
hammer can indeed solve every problem; it just solves most of them&lt;br /&gt;
badly, and so do these many technologies-du-jour.  Each has a small&lt;br /&gt;
number of proper uses and a large number of inappropriate uses, and each&lt;br /&gt;
is proposed to be the only solution you need for entire classes of problems.&lt;br /&gt;
&lt;br /&gt;
When an entire industry is this deluded, you can expect crazy behavior.&lt;br /&gt;
For example, if the American College of Physician Executives says the&lt;br /&gt;
state of medical informatics is a disaster, except for VistA, which is&lt;br /&gt;
great, you can expect the industry to complain as one that no, that&lt;br /&gt;
cannot be so, for look: VistA is not written in brand X.  No matter how&lt;br /&gt;
bad most medical software is, VistA&amp;#039;s success cannot be as interesting&lt;br /&gt;
as which technologies it uses.  Failure according to the prescribed&lt;br /&gt;
technology is the only permitted option.  Succeeding with a technology&lt;br /&gt;
that everyone agrees cannot work must be a mirage.  Look away, before&lt;br /&gt;
the VistA heathens corrupt you with their non-brand-X ways.&lt;br /&gt;
&lt;br /&gt;
So let me play Ariadne to your Theseus and offer you the golden clew&lt;br /&gt;
with which to escape the labyrinth: ignore technology; focus on&lt;br /&gt;
features.  The short answer to whether you should choose a relational or&lt;br /&gt;
hierarchical model is: don&amp;#039;t.  Forget about technology.  Leave that to&lt;br /&gt;
the programmers.  Focus instead on the problems you are trying to solve,&lt;br /&gt;
the features you want, the kinds of information you need.  That is by&lt;br /&gt;
far the harder problem, and something the technologist cannot do for&lt;br /&gt;
you.  If instead you focus on the technology, not only are you&lt;br /&gt;
artificially constraining the solution (thus increasing the chances of&lt;br /&gt;
failure) but also neglecting the harder problem that only you can do&lt;br /&gt;
(thus ensuring failure).&lt;br /&gt;
&lt;br /&gt;
Yours truly,&lt;br /&gt;
[[Rick Marshall|Rick]]&lt;/div&gt;</summary>
		<author><name>152.131.9.69</name></author>
	</entry>
</feed>