SQL Server 2008 Bootcamp Día 2 SQL 2008...

31
SQL 2008 HierarchyID SQL Server 2008 Bootcamp Día 2

Transcript of SQL Server 2008 Bootcamp Día 2 SQL 2008...

SQL 2008

HierarchyID

SQL Server 2008 Bootcamp – Día 2

Información sobre versiones

beta• Toda la información y ejemplos respectivos, son

relativos a la beta pública CTP5 de SQL Server

2008

• Comandos y funcionalidades pueden diferir de

la versión RTM final

2© 2007 Solid Quality Mentors

Agenda

• HiearchyId

– Escenarios

– Propiedades clave

– Indexación

– Métodos

– Actualizando a SQL 2008

HiearchyId

3© 2007 Solid Quality Mentors

HierarchyID

• Foros, e hilos en listas de correo

• Gráficos de organización de negocio

• Categorías de gestión de contenidos (CMS)

• Categorías de productos

• Gestión de Archivos/Carpetas

• Una estructura organizacional

• Un conjunto de tareas de un proyecto

• Un grafo de enlaces entre páginas web

Escenarios

4© 2007 Solid Quality Mentors

HierarchyID

• Codifica lógicamente información sobre un nodo

singular en un árbol jerárquico, codificando la

ruta desde la raíz del árbol, al nodo

– Como una secuencia de etiquetas de nodo de un hijo

visitado después del padre

• Una introducción comienza la representación

– La raíz se representa por una introducción única

– Cuatro niveles por debajo de la raíz, cada etiqueta se

codifica como una secuencia de enteros separados

por puntos

Propiedades clave

5© 2007 Solid Quality Mentors

DEMO 1

Vistazo al uso de HID

6© 2007 Solid Quality Mentors

HierarchyID

– La comparación entre hijos se realiza

comparando la secuencia de enteros separados

por comas en un orden de diccionario.

• Cada nivel es seguido de una barra

• Una barra separa padres de hijos

– Los nodos se pueden insertar en cualquier lugar

• Los nodos insertados después de /1/2/ pero

antes de /1/3/ se pueden representar como

/1/2.5/.

• Los nodos insertados antes de 0 tienen la

representación lógica de un número negativo

Propiedades clave

7© 2007 Solid Quality Mentors

HierarchyID

• Hace fácil el guardar

datos y preguntar por

datos jerárquicos

• Optimizado para

representar árboles, que

son la forma mas común

de datos jerárquicos

– Extremadamente

compacto

Propiedades clave

8© 2007 Solid Quality Mentors

/

/1 /2 /3

/1/1 /1/2

/1/1/1

/1/1/1/1

/3/1 /3/2

HierarchyID

• El número medio de bits necesarios para

representar un nodo en un árbol con n nodos,

depende del “fanout” medio

– Fanout: La media de número de hijos de un nodo

• Para pocos fanouts (0-7) el tamaño está sobre

6*logAn bits

– Donde A es el fanout medio

Propiedades clave

9© 2007 Solid Quality Mentors

HierarchyID

• Un nodo en una jerarquía organizacional de

100k elementos con un fanout medio de 6

niveles ocupa sobre 38 bits

– 6 * log6100000 = 38.55

– Los 38 bits son redondeados a 5 bytes (40 bits) para

el almacenamiento

Propiedades clave

10© 2007 Solid Quality Mentors

HierarchyID

• Un tipo de datos del sistema con un tamaño

variable

– CLR UDT

– Microsoft.SqlServer.Types

• Disponible a los clientes como tipo SqlHierarchyId

– Codificación Varbinary (892 bytes max)

• Para representar la posición jerárquica

– No representa una jerarquía por si mismo

• Codifica lógicamente la información sobre un

nodo singular en un árbol jerárquico, codificando

la ruta desde la raíz al nodo

Propiedades clave

11© 2007 Solid Quality Mentors

HierarchyID

• Métodos ricos de manipulación jerárquica nativa

(built-in)

• Simplifica el almacenamiento y recuperación de

datos jerárquicos

• La comparación es en “Depth first”

– a<b significa que a viene antes de b en un recorrido

en profundidad

• Soporte para inserciones y borrados arbitrarios

– Usando métodos del tipo de datos

Propiedades clave

12© 2007 Solid Quality Mentors

HierarchyID

• Dos estrategias para indexado jerárquico de los

datos

– Profundidad (Depth First)

– Anchura (Breadth First)

• No hay palabras especiales para crear índices

– Depth First o Breath first basan las columnas en la

forma en que creaste el índice

• Por defecto: Depth First

• Si pones una columna que contiene un nivel de nodo como

la primera columna: Breath First

Indexado

13© 2007 Solid Quality Mentors

HierarchyID

• Las filas en el subárbol se guardan cerca unas

de otras

• Todos los empleados que reportan al jefe, se

guardan cerca del nodo de su jefe

Indexado – Depth First

14© 2007 Solid Quality Mentors

HierarchyID

• Las filas de cada nivel de jerarquía se guardan

cerca unas de otras

– Los datos de empleados que directamente reportan

al mismo jefe se guardan cerca unos de otros

Indexado – Breadth First

15© 2007 Solid Quality Mentors

HierarchyID

• Escenario de tipo de índice:

– Depth-first: los índices son eficientes para responder

consultas sobre sub-árboles, como “busca todos los

archivos en este directorio y sus subdirectorios”

– Breadth-first: Los índices son eficientes para

responder consultas sobre hijos inmediatos, del estilo

“encuentra todos los empleados que reportan

directamente a este jefe”

Indexado

16© 2007 Solid Quality Mentors

DEMO 2

Índices

17© 2007 Solid Quality Mentors

HierarchyID

• Es tarea de la aplicación, manejar la

concurrencia en la generación y asignación de

valores jerárquicos

– No se garantiza que los valores hierarchyid en una

columna sean únicos

• Utiliza la restricción UNIQUE para ello

• Una columna de tipo hierarchyid no representa

automáticamente un árbol

– Es tarea de la aplicación generar y asignar valores

hiearchyid de la forma en la que las filas tengan que

relacionarse

Notas

18© 2007 Solid Quality Mentors

HierarchyID

• Las relaciones jerárquicas representados por

valores hierarchyid no están reforzadas por

claves ajenas

– Es posible tener una relación jerárquica donde A

tiene un hijo B y que se borre A dejando B con una

relación inexistente

• Si este comportamiento no es aceptable, la aplicación ha de

consultar por los hijos antes de borrar los padres

Notas

19© 2007 Solid Quality Mentors

HierarchyID

• La conversión de hiearchyid a XML no está

soportada

• El método ToString() convierte el valor

hiearchyid en su representación lógica como un

tipo de datos varchar(4000)

• Utiliza los métodos Read() y Write() para

convertir hierarchyid a varbinary.

– Solo internamente

Notas

20© 2007 Solid Quality Mentors

HierarchyID

• GetAncestor

• GetDescendant

• GetLevel

• GetRoot

• IsDescendant

• Parse

• Read

• Reparent

• ToString

• Write

Métodos

21© 2007 Solid Quality Mentors

HierarchyID

• La invocación es CASE SENSITIVE!

• GetRoot es “static” o “shared”

– Devuelve la raíz de la jerarquía

• Utilizando los métodos del tipo de datos, se

puede actualizar los datos hiearchyid de varias

formas

– Ej.: Usando el método GetDescendant , siempre será

posible generar un hermano a la derecha de

cualquier nodo, a la izquierda de cualquier nodo, o

entre cualquiera de dos hermanos

Métodos

22© 2007 Solid Quality Mentors

DEMO 3

Métodos

23© 2007 Solid Quality Mentors

Actualizando a SQL 2008

• Cuando una BBDD se actualiza a SQL Server

2008, se instalan automáticamente el nuevo

ensamblado, y el tipo de datos hierarchyid

– Las reglas de “Upgrade advisor” detectan tipos de

datos o ensamblados que tenga conflicto de nombres

– Upgrade advisor advierte del re-nombramiento de

cualquier ensamblado conflictivo y permite

renombrarlo o utilizar una nomenclatura de dos

partes para referirse al tipo de datos pre-existente

24© 2007 Solid Quality Mentors

Actualizando a SQL 2008

• Si una actualización de BBDD detecta un

ensamblado conflictivo, se renombra

automáticamente y se pone la BBDD en estado

“suspect”

• Si un tipo de usuario con conflicto existe durante

la actualización, no se sigue ningún paso

especial

– Después de la actualización, ambos dos existirán. El

tipo de datos de usuario pre-existente, solo estará

presente a través de una nomenclatura en dos partes

25© 2007 Solid Quality Mentors

Alternativas

• Padre/hijo

• XML

• hierarchyid es por lo general superior a estas

alternativas

Vistazo

26© 2007 Solid Quality Mentors

Alternativas

• Padre/hijo

– Consultas a sub-árboles son significativamente mas

rápidas con hierarchyid

– Consultas directamente descendentes son levemente

mas lentas con hierarchyid.

– Inserción y movimiento de nodos son

considerablemente mas lentas con hierarchyid.

Padre/hijo

27© 2007 Solid Quality Mentors

Alternativas

• Es mas óptimo utilizar XML cuando estas reglas

se cumplen:

– La jerarquía completa siempre se guarda y se

consulta

– Los datos se consumen en formato XML por la

aplicación

– Los predicados de las consultas son extremadamente

limitados y no son críticos en rendimiento

• En SQL Server, cuando se crea un índice XML,

los valores hiearchyid se utiliza de forma interna

para representar la posición jerárquica

XML

28© 2007 Solid Quality Mentors

DEMO 4

Demo completa

29© 2007 Solid Quality Mentors

Preguntas y respuestas

HierarchyID

SQL Server 2008 Links

• Site de SQL Server 2008

– http://www.microsoft.com/sql/2008/

• Ejemplos de SQL Server 2008

– http://www.codeplex.com/SqlServerSamples

31© 2007 Solid Quality Mentors