Re: A Normalization Question

From: Neo <neo55592_at_hotmail.com>
Date: 12 Jul 2004 19:57:34 -0700
Message-ID: <4b45d3ad.0407121857.7ab12f1f_at_posting.google.com>


> > References aren't within the scope of normalizing things in a db
> > because they are independent of the things being represented.
>
> But you expose them (references/pointers) to us as part of a data model and
> use it to support your notion of a "most general form of normalization."
> You do it over and over. If they are not in scope, then don't bring them
> up.

A clearification/correction as to why references don't need to be normalized. A reference encodes the thing referencing (start point) and the thing referred (end point). In the diagram below, none of the references to red are redundant, because no reference has the same start and end points. While the end point (red) is the same in all cases, the starting point is not. The starting point is implicit while the end point is explict. Because the starting point is implict, the 3's to red appear redundant but aren't because the references are actually 1->3 and 2->3.

-------RM------ ---XDb1------ ---Brain?--- T_Persons T_Persons T_Persons ID Person Color Person Color Person Color

1  john   3       john   ->3      john   ---| 
2  mary   3       mary   ->3      mary   ---|
                                  __________|
                                  |
T_Color           T_Color         |   T_Color
ID Name           ID Name         |   Name
3  red            3  red          |-> red


> (or objects in Neo speak)

Neo speaks things, not objects, but objects are things.

> Very few users are going to specify their system or their universe of
> discourse in terms of a model where alphabet symbols are one type of node
> and sequences of symbols are another type of node with a morass of directed
> arcs between these nodes. That provide no value in terms of information or
> meaning when considering the units in isolation.

Human brains already do the above where each symbol is a thing and each word is also a thing. The value of doing this beyond your understanding at the moment and so is the capability of RM for AI-type apps.

> Moreover, when thinking about your "normalized model", I've come to the
> conclusion that you actually introduce the potential for unintended update
> anomolies precisely because of the fact that normalization is based on
> functional dependencies (read semantic rules) while your efforts are
> constrained to syntactic dependencies.

You have come to the wrong conclusion because you are incorrectly thinking that there are multiple instances of a string and/or renaming a few of the things named by a string is performed by updating the string. It isn't, the db only has one string 'brown' and needs to create a new string and rerelate only those that need to be renamed.

> If I were to delete the 'r' in 'brown' in your string list, would all
> instances of 'brown' be modified (e.g. person name, street name, etc.).?

No because, there is but only one string 'brown' in XDb1 and it doesn't have any instances. However since a person, a color and a street reference the string as their name, after the change, each thing now references the updated string 'bown' for their name.

> If I were to change the 'br' in 'brown' of the street name to 'cl', would
> all other references to 'brown' associated with other "objects" reflect this
> update?

Neither the person, the color, nor the street have its own copy of 'brown', they refers to the one and only string 'brown' as their name. If your intent is to rename the street to 'clown', XDb1 searches for an existing string 'clown', if it doesn't find it, it creates a string 'clown', unrelates the street from 'brown' and then re-relates it to 'clown'.

If your intent was to rename all things named 'brown' to 'clown', than simply update the string 'brown'.

> How would you know one way or the other how the system should
> behave without semantic considerations? A user might want all strings of
> 'brown' changed to 'clown' and in other cases, only the name of the object
> he or she is altering.

Because the person, color, street and string are all different things, editing things named by the string vs editing the string itself has a different impact. If user changes the string 'brown' to 'clown', all things are in affect renamed because they all reference what was previously 'brown'. If user changes a person's name (via the person), XDb1 knows to create a new string and relate to it without affecting the existing relationship between color and street and the string 'brown'. Received on Tue Jul 13 2004 - 04:57:34 CEST

Original text of this message