How the structure of your website is silently killing your Google rankings

Posted on : by : Developers Dex


Trees in SQL – nested set model
Author: Joe Celko 
Rating: 
Visits: 61572 Discuss in NewsgroupsPage: The usual example of a tree structure in SQL books is called an adjacency list model and it looks like this:CREATE TABLE OrgChart
(emp CHAR(10) NOT NULL PRIMARY KEY,
  boss CHAR(10) DEFAULT NULL REFERENCES OrgChart(emp),
  salary DECIMAL(6,2) NOT NULL DEFAULT 100.00);OrgChart
emp       boss      salary
===========================
‘Albert’ ‘NULL’    1000.00
‘Bert’    ‘Albert’   900.00
‘Chuck’   ‘Albert’   900.00
‘Donna’   ‘Chuck’    800.00
‘Eddie’   ‘Chuck’    700.00
‘Fred’    ‘Chuck’    600.00Another way of representing trees is to show them as nested sets. Since SQL is a set oriented language, this is a better model than the usual adjacency list approach you see in most text books. Let us define a simple OrgChart table like this, ignoring the left (lft) and right (rgt) columns for now. This problem is always given with a column for the employee and one for his boss in the textbooks. This table without the lft and rgt columns is called the adjacency list model, after the graph theory technique of the same name; the pairs of emps are adjacent to each other.CREATE TABLE OrgChart
(emp CHAR(10) NOT NULL PRIMARY KEY,
  lft INTEGER NOT NULL UNIQUE CHECK (lft > 0),
  rgt INTEGER NOT NULL UNIQUE CHECK (rgt > 1),
  CONSTRAINT order_okay CHECK (lft < rgt) );OrgChart
emp         lft rgt
======================
‘Albert’      1   12
‘Bert’        2    3
‘Chuck’       4   11
‘Donna’       5    6
‘Eddie’       7    8
‘Fred’        9   10The organizational chart would look like this as a directed graph:            Albert (1,12)
            /        \
          /            \
    Bert (2,3)    Chuck (4,11)
                   /    |   \
                 /      |     \
               /        |       \
             /          |         \
        Donna (5,6)  Eddie (7,8)  Fred (9,10)The first table is denormalized in several ways. We are modeling both the OrgChart and the organizational chart in one table. But for the sake of saving space, pretend that the names are job titles and that we have another table which describes the OrgChart that hold those positions.Another problem with the adjacency list model is that the boss and employee columns are the same kind of thing (i.e. names of OrgChart), and therefore should be shown in only one column in a normalized table.  To prove that this is not normalized, assume that “Chuck” changes his name to “Charles”; you have to change his name in both columns and several places. The defining characteristic of a normalized table is that you have one fact, one place, one time.The final problem is that the adjacency list model does not model subordination. Authority flows downhill in a hierarchy, but If I fire Chuck, I disconnect all of his subordinates from Albert. There are situations (i.e. water pipes) where this is true, but that is not the expected situation in this case.

Company Reviews

Leave a Reply

Your email address will not be published. Required fields are marked *