<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=MVDefinition</id>
	<title>MVDefinition - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=MVDefinition"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=MVDefinition&amp;action=history"/>
	<updated>2026-04-28T22:13:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=MVDefinition&amp;diff=2021&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=MVDefinition&amp;diff=2021&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:55Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= A formal mathematical critique of Relational Theory and its [[MultiValue]] opposition. =&lt;br /&gt;
&lt;br /&gt;
This paper is intended to show, by use as far as possible of formal&lt;br /&gt;
mathematics, that relational theory for the most part is a subset of&lt;br /&gt;
[[MultiValue]], and that many of the problems with Relational stem from the&lt;br /&gt;
constraints applied to it that are not relevant to its [[MultiValue]]&lt;br /&gt;
sibling.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mathematical Logic =&lt;br /&gt;
&lt;br /&gt;
But firstly, we need a basic introduction into Mathematical Logic. It&amp;#039;s&lt;br /&gt;
all very well saying &amp;quot;let&amp;#039;s be mathematically rigorous&amp;quot;, but if your&lt;br /&gt;
mathematical foundation has thumping great cracks running throught it,&lt;br /&gt;
then the entire superstructure is going to come crashing down!&lt;br /&gt;
&lt;br /&gt;
All mathematical theory is built upon axioms. An axiom is true &amp;quot;because&lt;br /&gt;
I said so&amp;quot;. In order to &amp;quot;prove&amp;quot; an axiom (in the old-fashioned meaning&lt;br /&gt;
of the word - to test - &amp;quot;the exception proves the rule (is wrong)&amp;quot;), you&lt;br /&gt;
start with the assumption that the axiom is true and try to prove it is&lt;br /&gt;
false, and vice versa. If it survives this battering, then it is&lt;br /&gt;
consistent, and circular logic at least proves you&amp;#039;re not being stupid.&lt;br /&gt;
Even better, however, is to succeed in proving your axiom is true&lt;br /&gt;
without assuming it is true to start with - ie proving it using solely other&lt;br /&gt;
axioms. If you can do this, it ceases to be an axiom, and becomes a&lt;br /&gt;
theorem - a fact derived from other axioms.&lt;br /&gt;
&lt;br /&gt;
In all walks of intellectual endeavour, the desire is to reduce the&lt;br /&gt;
number of axioms and replace them by theorems. To the extent that many&lt;br /&gt;
lay (and not so lay) practitioners of theory do not even realise the&lt;br /&gt;
difference between an axiom and theorem - they think axioms are proven&lt;br /&gt;
fact.&lt;br /&gt;
&lt;br /&gt;
To give a perfect example of the havoc this can cause, consider Euclid&amp;#039;s&lt;br /&gt;
statement that parallel lines never meet. For thousands of years, this&lt;br /&gt;
was considered an axiom of geometry. So much so, that even Newton didn&amp;#039;t&lt;br /&gt;
question it. Then, in the 19th century, various logicians said &amp;quot;what if&lt;br /&gt;
we assume parallel lines *can* meet?&amp;quot;, and they came up with some very&lt;br /&gt;
strange geometries. Einstein picked up on this, and we ended up with&lt;br /&gt;
Relativity.&lt;br /&gt;
&lt;br /&gt;
Just take a look at the wikipedia&amp;#039;s entries for [http://en.wikipedia.org/wiki/Euclid Euclid] and [http://en.wikipedia.org/wiki/Axiom Axioms]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= The Relational Model and the Two-Dimensions Rule =&lt;br /&gt;
&lt;br /&gt;
According to C.J.Date, the first rule of relational databases is:&lt;br /&gt;
&lt;br /&gt;
1. The Information Rule simply requires all information in the database&lt;br /&gt;
to be represented in one and only one way, namely by values in column&lt;br /&gt;
positions within rows of tables.&lt;br /&gt;
&lt;br /&gt;
And the second rule is:&lt;br /&gt;
&lt;br /&gt;
2. The Guaranteed Access Rule. This rule is essentially a restatement of&lt;br /&gt;
the fundamental requirement for primary keys. It says that every&lt;br /&gt;
individual scalar value in the database must be logically addressable by&lt;br /&gt;
specifying the name of the containing table, the name of the containing&lt;br /&gt;
column, and the primary key value of the containing row.&lt;br /&gt;
&lt;br /&gt;
(Quoted from &amp;quot;An introduction to Database Systems&amp;quot;, 5th Edition)&lt;br /&gt;
&lt;br /&gt;
Note that the formal proof, as noted above, is &amp;quot;because&amp;quot;. These two&lt;br /&gt;
rules basically require that the database store data as two-dimensional&lt;br /&gt;
tables. Now what&amp;#039;s all this crap about &amp;quot;clustering&amp;quot;, if not an attempt&lt;br /&gt;
to get round these rules without actually breaking them?&lt;br /&gt;
&lt;br /&gt;
Meanwhile, [[MultiValue]] represents data as n-dimensional arrays where n is&lt;br /&gt;
unrestricted (but usually limited in practice to 3 or 4 at the outside).&lt;br /&gt;
Any individual scalar value can be accessed by specifying the FILE name,&lt;br /&gt;
RECORD primary key, FIELD name, and then as many sequence offsets as are&lt;br /&gt;
required (almost invariably 1 at most). So we can easily meet&lt;br /&gt;
relational&amp;#039;s requirements by specifying a subset of [[MultiValue]] with n=2.&lt;br /&gt;
&lt;br /&gt;
Don&amp;#039;t forget - in Mathematics, the general proof always trumps the&lt;br /&gt;
specific! So if I can up with a proof for &amp;quot;n&amp;quot;, where n is any number, it&lt;br /&gt;
will always trump a proof for &amp;quot;n where n=2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Systematic Treatment of Null Values =&lt;br /&gt;
&lt;br /&gt;
Both relational and [[MultiValue]] fall down here, in practice. To quote&lt;br /&gt;
Date:&lt;br /&gt;
&lt;br /&gt;
3. Systematic Treatment of Null Values. The DBMS is required to support a&lt;br /&gt;
representation of &amp;quot;missing information and inapplicable information&amp;quot;&lt;br /&gt;
that is systematic, distinct from all regular values (for example,&lt;br /&gt;
&amp;quot;distinct from zero or any other number&amp;quot;, in the case of numeric&lt;br /&gt;
values), and independent of type. It is also implied that such&lt;br /&gt;
representations must be manipulated by the DBMS in a systematic way.&lt;br /&gt;
&lt;br /&gt;
[[MultiValue]] uses the empty string. Relational uses NULL. Both mechanisms&lt;br /&gt;
are incapable of distinguishing between &amp;quot;missing&amp;quot; and &amp;quot;inapplicable&amp;quot;,&lt;br /&gt;
and hence are incapable of manipulating the two in a systematic way. What&lt;br /&gt;
is even worse, picking on Date&amp;#039;s own example, is that relational cannot&lt;br /&gt;
handle &amp;quot;infinity&amp;quot;, which is a valid number ...&lt;br /&gt;
&lt;br /&gt;
The important point to note here is that relational seeks to handle it&lt;br /&gt;
within the database (and fails). [[MultiValue]] just admits that it can&amp;#039;t,&lt;br /&gt;
and pushes it out to the application level.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Defining the Database in terms of itself =&lt;br /&gt;
&lt;br /&gt;
Both [[MultiValue]] and Relational require that the metadata be accessed&lt;br /&gt;
using the standard query tools. In principle, there is no difference.&lt;br /&gt;
&lt;br /&gt;
In practice, however, [[MultiValue]] simply makes no distinction between&lt;br /&gt;
data and metadata. Relational treats metadata as very distinct from&lt;br /&gt;
data, just accessed via the same tools. There is nothing to stop&lt;br /&gt;
relational from implementing a metadata query differently from a data&lt;br /&gt;
query so long as the user doesn&amp;#039;t see the difference. [[MultiValue]] is not&lt;br /&gt;
allowed to know that there is a difference. Which is approach is simpler&lt;br /&gt;
and more generic?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comprehensive Data Access and Update =&lt;br /&gt;
&lt;br /&gt;
WHY!? The primary aim of Date&amp;#039;s rules 5, 6 and 7 seems to be to ensure&lt;br /&gt;
that data integrity can be maintained when the data to be updated is&lt;br /&gt;
necessarily scattered across multiple tables. The obvious cause of this&lt;br /&gt;
is where data in the real world is packaged in n-dimensional chunks&lt;br /&gt;
called objects, and it is a requirement to keep reality and the database&lt;br /&gt;
in sync. Now why does [[MultiValue]] define data as coming in n-dimensional&lt;br /&gt;
arrays, again?&lt;br /&gt;
&lt;br /&gt;
Implementing a bi-directional access language (read and write) is a&lt;br /&gt;
nightmare. SQL was meant to be for end-users - it was originally&lt;br /&gt;
called Structured English Query Language. I can only presume the&lt;br /&gt;
&amp;quot;English&amp;quot; was dropped because the end result bore no acceptable&lt;br /&gt;
resemblance to English.&lt;br /&gt;
&lt;br /&gt;
On the other hand, one of the names for [[MultiValue]]&amp;#039;s query language is&lt;br /&gt;
&amp;quot;English&amp;quot;, precisely because it is reasonably close to it. There is no&lt;br /&gt;
standard write language for [[MultiValue]] (unless you count SQL as it),&lt;br /&gt;
though, precisely because the generic task is so complex.&lt;br /&gt;
&lt;br /&gt;
However, [[MultiValue]] does not need to require that we be able to update&lt;br /&gt;
views. A relational view is n-dimensional, and for any view where&lt;br /&gt;
requiring updates would make logical sense, [[MultiValue]] would store it as&lt;br /&gt;
a single array.&lt;br /&gt;
&lt;br /&gt;
Equally, high level insert, update and delete is a completely arbitrary&lt;br /&gt;
requirement that is presumably relied upon to delete all related rows&lt;br /&gt;
that, in [[MultiValue]], would have been stored in a single array.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Physical and Logical Independence =&lt;br /&gt;
&lt;br /&gt;
This requirement in particular seems predicated on viewing things as a&lt;br /&gt;
&amp;lt;b&amp;gt;data&amp;lt;/b&amp;gt;base, rather than an &amp;lt;b&amp;gt;information&amp;lt;/b&amp;gt; store. Okay, it is a&lt;br /&gt;
Relational &amp;lt;b&amp;gt;Database&amp;lt;/b&amp;gt; Management System we&amp;#039;re trashing...&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Logical Independence&amp;quot; requires that the DBA be able to rearrange how&lt;br /&gt;
data is stored without affecting the user&amp;#039;s view of that data. MV,&lt;br /&gt;
however, restricts the DBA&amp;#039;s freedom by imposing a practical requirement&lt;br /&gt;
that that view approximates to the real-world view of the thing being&lt;br /&gt;
modelled by the data. No single requirement highlights the divorce&lt;br /&gt;
behind relational&amp;#039;s theory of data and the real world more clearly than&lt;br /&gt;
this one.&lt;br /&gt;
&lt;br /&gt;
Given that MV imposes some resemblance between the database and the&lt;br /&gt;
reality it is modelling, and given also that modern implementations use&lt;br /&gt;
an OS file store rather than seeking to manage their own storage as one&lt;br /&gt;
huge blob, the physical independence is easily achieved. FILEs can be&lt;br /&gt;
placed in any convenient location.&lt;br /&gt;
&lt;br /&gt;
This also addresses rule 11 - Distribution independence - in pretty much&lt;br /&gt;
the same way.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Integrity Independence and Non-Subversion =&lt;br /&gt;
&lt;br /&gt;
Currently missing from the MV model as a formal constraint. But the&lt;br /&gt;
relational model does not distinguish between &amp;quot;natural law&amp;quot; constraints,&lt;br /&gt;
where a description has no meaning outside of the object it describes,&lt;br /&gt;
and &amp;quot;statute law&amp;quot; constraints, relationships where the two objects can&lt;br /&gt;
have an independent existence independent of the relationship between&lt;br /&gt;
them.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;natural law&amp;quot; constraint is unnecessary in MV because in a properly&lt;br /&gt;
designed database, the description is stored with the object and if the&lt;br /&gt;
object does not exist there is nowhere to store the description.&lt;br /&gt;
&lt;br /&gt;
On the other hand, &amp;quot;statute law&amp;quot; constraints can be very dangerous -&lt;br /&gt;
enforcing constraints that don&amp;#039;t exist in the real world thereby&lt;br /&gt;
requiring that the user enter data that is invalid in order to persuade&lt;br /&gt;
the database to accept data that is valid.&lt;br /&gt;
&lt;br /&gt;
So this sort of satisfies the non-subversion rule in exactly the same&lt;br /&gt;
way - you can&amp;#039;t subvert &amp;quot;natural law&amp;quot; constraints because the MV&lt;br /&gt;
structure enforces it. But you can subvert &amp;quot;statute law&amp;quot; relationships&lt;br /&gt;
because you can get at and edit the data directly.&lt;/div&gt;</summary>
		<author><name>Conversion script</name></author>
	</entry>
</feed>