P. 1
Modelo Relacional

Modelo Relacional

|Views: 109|Likes:

More info:

Published by: mdelossantosolivares on Nov 18, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

11/18/2011

pdf

text

original

Base de datos Modelo relacional Grupo 5

Modelo relacional
El modelo relacional para la gestión de una base de datos es un modelo de datos basado en la lógica de predicados y en la teoría de conjuntos. Es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Tras ser postuladas sus bases en 1970 por Edgar Frank Codd, de los laboratorios IBM en San José (California), no tardó en consolidarse como un nuevo paradigma en los modelos de base de datos. Su idea fundamental es el uso de «relaciones». Estas relaciones podrían considerarse en forma lógica como conjuntos de datos llamados «tuplas». Pese a que ésta es la teoría de las bases de datos relacionales creadas por Edgar Frank Codd, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar, esto es, pensando en cada relación como si fuese una tabla que está compuesta por registros (cada fila de la tabla sería un registro o tupla), y columnas (también llamadas campos). En este modelo todos los datos son almacenados en relaciones, y como cada relación es un conjunto de datos, el orden en el que estos se almacenen no tiene relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar por un usuario no experto. La información puede ser recuperada o almacenada por medio de consultas que ofrecen una amplia flexibilidad y poder para administrar la información. Este modelo considera la base de datos como una colección de relaciones. De manera simple, una relación representa una tabla que no es más que un conjunto de filas, cada fila es un conjunto de campos y cada campo representa un valor que interpretado describe el mundo real. Cada fila también se puede denominar tupla o registro y a cada columna también se le puede llamar campo o atributo. Para manipular la información utilizamos un lenguaje relacional, actualmente se cuenta con dos lenguajes formales el Álgebra relacional y el Cálculo relacional. El Álgebra relacional permite describir la forma de realizar una consulta, en cambio, el Cálculo relacional sólo indica lo que se desea devolver.

1

Base de datos Modelo relacional Grupo 5

Estructura
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o instancia). El esquema es la definición de la estructura de la base de datos y principalmente almacena los siguientes datos:
   

El nombre de cada tabla El nombre de cada columna El tipo de dato de cada columna La tabla a la que pertenece cada columna

Las bases de datos relacionales pasan por un proceso al que se le conoce como normalización, el resultado de dicho proceso es un esquema que permite que la base de datos sea usada de manera óptima. Los datos o instancia es el contenido de la base de datos en un momento dado. Es en sí, el contenido de todos los registros.

Esquema
Un esquema es la definición de una estructura (generalmente relaciones o tablas de una base de datos), es decir, determina la identidad de la relación y qué tipo de información podrá ser almacenada dentro de ella; en otras palabras, el esquema son los metadatos de la relación. Todo esquema constará de:
 

Nombre de la relación (su identificador). Nombre de los atributos (o campos) de la relación y sus dominios; el dominio de un atributo o campo define los valores permitidos para el mismo, es equivalente al tipo de dato por ejemplo character, integer, date, string, etc.

Esquema de una base de datos relacional Una base de datos relacional es un conjunto de relaciones normalizadas. Para representar el esquema de una base de datos relacional se debe dar el nombre de sus relaciones, los atributos de éstas, los dominios sobre los que se definen estos atributos, las claves primarias y las claves ajenas.

2

Base de datos Modelo relacional Grupo 5

El esquema de la base de datos de la empresa inmobiliaria es el siguiente: OFICINA PLANTILLA INMUEBLE INQUILINO (Onum, Calle, Area, Población, Teléfono, Fax) (Enum, Nombre, Apellido, Dirección, Teléfono, Puesto, Fecha_nac, Salario, DNI, Onum) (Inum, Calle, Area, Población, Tipo, Hab, Alquiler, Pnum, Enum, Onum) (Qnum, Nombre, Apellido, Dirección, Teléfono, Tipo_pref, Alquiler_max) PROPIETARIO (Pnum, Nombre, Apellido, Dirección, Teléfono) VISITA (Qnum, Inum, Fecha, Comentario)

Claves
Clave única Cada tabla puede tener uno o más campos cuyos valores identifican de forma única cada registro de dicha tabla, es decir, no pueden existir dos o más registros diferentes cuyos valores en dichos campos sean idénticos. Este conjunto de campos se llama clave única. Pueden existir varias claves únicas en una determinada tabla, y a cada una de éstas suele llamársele candidata a clave primaria. Clave primaria Una clave primaria es una clave única elegida entre todas las candidatas que define unívocamente a todos los demás atributos de la tabla, para especificar los datos que serán relacionados con las demás tablas. La forma de hacer esto es por medio de claves foráneas. Sólo puede existir una clave primaria por tabla y ningún campo de dicha clave puede contener valores NULL.

3

Base de datos Modelo relacional Grupo 5

Clave foránea Una clave foránea es una referencia a una clave en otra tabla. Las claves foráneas no necesitan ser claves únicas en la tabla donde están y sí a donde están referenciadas. Por ejemplo, el código de departamento puede ser una clave foránea en la tabla de empleados, obviamente se permite que haya varios empleados en un mismo departamento, pero existirá sólo un departamento. Clave índice Las claves índices surgen con la necesidad de tener un acceso más rápido a los datos. Los índices pueden ser creados con cualquier combinación de campos de una tabla. Las consultas que filtran registros por medio de estos campos, pueden encontrar los registros de forma no secuencial usando la clave índice. Las bases de datos relacionales incluyen múltiples técnicas de ordenamiento, cada una de ellas es óptima para cierta distribución de datos y tamaño de la relación. Los índices generalmente no se consideran parte de la base de datos, pues son un detalle agregado. Sin embargo, las claves índices son desarrolladas por el mismo grupo de programadores que las otras partes de la base de datos.

Lenguajes de Consulta
Los podemos dividir en dos tipos: Lenguajes Formales y Lenguajes Comerciales. Los lenguajes formales están basados en el álgebra relacional o en el cálculo relacional. Solamente se han descrito para consulta a Bases de Datos (existen lenguajes comerciales que además de consulta permiten otras operaciones). El álgebra relacional tiene procedimientos (procedimental), mientras que los lenguajes basados en el cálculo relacional son a procedimentales. Dentro del cálculo relacional se distingue entre cálculo relacional orientado a tuplas y cálculo relacional orientado a dominios. Los lenguajes comerciales, en su mayoría usan enfoques tanto procedimentales como a procedimentales, o lo que es lo mismo, no son lenguajes puros como los formales. De esta manera hacen su sintaxis más amigable al usuario.

4

Base de datos Modelo relacional Grupo 5

Álgebra relacional
El álgebra relacional es un conjunto de operaciones que describen paso a paso como computar una respuesta sobre las relaciones, tal y como éstas son definidas en el modelo relacional. Denominada de tipo procedimental, a diferencia del Cálculo relacional que es de tipo declarativo. Describe el aspecto de la manipulación de datos. Estas operaciones se usan como una representación intermedia de una consulta a una base de datos y, debido a sus propiedades algebraicas, sirven para obtener una versión más optimizada y eficiente de dicha consulta.

Operaciones Básicas
Cada operador del álgebra acepta una o dos relaciones y retorna una relación como resultado. σ y Π son operadores unarios, el resto de los operadores son binarios. Las operaciones básicas del álgebra relacional son:

Selección (σ)
Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) P, esto es:

Ejemplo:

Selecciona todas las tuplas que contengan Gómez como apellido en la relación Alumnos. Una condición puede ser una combinación booleana, donde se pueden usar operadores como: , combinándolos con operadores .

Proyección (Π)
Permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación, esto es:

5

Base de datos Modelo relacional Grupo 5

Donde Ejemplo:

son atributos de la relación R .

Selecciona los atributos Apellido, Semestre y NumeroControl de la relación Alumnos, mostrados como un subconjunto de la relación Alumnos

Producto cartesiano (x)
El producto cartesiano de dos relaciones se escribe como:

y entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S. Ejemplo:

Muestra una nueva relación, cuyo esquema contiene cada una de las tuplas de la relación Alumnos junto con las tuplas de la relación Maestros, mostrando primero los atributos de la relación Alumnos seguidos por las tuplas de la relación Maestros.

Unión (∪)
La operación

Retorna el conjunto de tuplas que están en R, o en S, o en ambas. R y S deben ser uniones compatibles. Diferencia (-) La diferencia de dos relaciones, R y S denotada por:

6

Base de datos Modelo relacional Grupo 5

Entrega todas aquellas tuplas que están en R, pero no en S. R y S deben ser uniones compatibles.

Estas operaciones son fundamentales en el sentido en que (1) todas las demás operaciones pueden ser expresadas como una combinación de éstas y (2) ninguna de estas operaciones pueden ser omitidas sin que con ello se pierda información.

No básicas
Entre los operadores no básicos tenemos:

Intersección (∩)
La intersección de dos relaciones se puede especificar en función de otros operadores básicos:

La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S uniones compatibles.

Reunión natural ( ) (Natural Join)
La operación Reunión natural en el álgebra relacional es la que permite reconstruir las tablas originales previas al proceso de normalización. Consiste en combinar las proyección, selección y producto cartesiano en una sola operación, donde la condición θ es la igualdad Clave Primaria = Clave Externa (o Foránea), y la proyección elimina la columna duplicada (clave externa). Expresada en las operaciones básicas, queda

Una reunión theta ( θ-Join) de dos relaciones es equivalente a:

Donde la condición θ es libre. Si la condición θ es una igualdad se denomina EquiJoin.
7

Base de datos Modelo relacional Grupo 5

División (/)
Supongamos que tenemos dos relaciones A(x, y) y B(y) donde el dominio de y en A y B, es el mismo. El operador división A / B retorna todos los distintos valores de x tales que para todo valor y en B existe una tupla en A.

Agrupación (Ģ)
Permite agrupar conjuntos de valores en función de un campo determinado y hacer operaciones con otros campos. Por ejemplo: Ģ sum(puntos) as Total Equipo (PARTIDOS). Ejemplos Suponga las relaciones o tablas:

Alumno

ID NOMBRE CIUDAD

EDAD

01 Pedro

Santiago

14

11 Juan

Buenos Aires 18

21 Diego

Lima

12

31 Rosita

Concepción 15

41 Manuel

Lima

17

8

Base de datos Modelo relacional Grupo 5

Apoderado

ID

NOMBRE FONO

ID_ALUMNO

054 Víctor

654644 21

457 José

454654 11

354 María

997455 31

444 Paz

747423 01

Curso

COD

NOMBRE

FECHA_INICIO DURACION VALOR

01142 Sicología

13-01

15

3.000

02145 Biología

15-02

12

2.500

03547 Matemáticas 01-03

30

4.000

04578 Música

05-04

10

1.500

05478 Física

20-04

15

3.200

9

Base de datos Modelo relacional Grupo 5

Inscrito

ID ID_AL COD

1 01

05478

2 01

02145

3 11

03547

4 21

02145

5 41

03547

Mostrar los nombres de los alumnos y su apoderado Primero, realizaremos una combinación entre alumnos y apoderados (pues necesitamos saber a qué alumno le corresponde tal apoderado). La combinación realizará un producto cartesiano, es decir, para cada tupla de alumnos (todas las filas de alumnos) hará una mezcla con cada una tupla de apoderados y seleccionará aquellas nuevas tuplas en que alumnos.id sea igual a apoderados.id_alumno, esto es:

ID NOMBRE CIUDAD (alumno) (alumno)

EDAD

ID NOMBRE FONO (apoderado) (apoderado)

ID_ALUMNO

01

Pedro

Santiago

14

054

Víctor

654644 21

01

Pedro

Santiago

14

457

José

454654 11

10

Base de datos Modelo relacional Grupo 5

01

Pedro

Santiago

14

354

María

997455 31

01

Pedro

Santiago

14

444

Paz

747423 01

11

Juan

Buenos Aires

18

054

Víctor

654644 21

11

Juan

Buenos Aires

18

457

José

454654 11

11

Juan

Buenos Aires

18

354

María

997455 31

11

Juan

Buenos Aires

18

444

Paz

747423 01

21

Diego

Lima

12

054

Víctor

654644 21

21

Diego

Lima

12

457

José

454654 11

21

Diego

Lima

12

354

María

997455 31

21

Diego

Lima

12

444

Paz

747423 01

31

Rosita

Concepción 15

054

Víctor

654644 21

31

Rosita

Concepción 15

457

José

454654 11

11

Base de datos Modelo relacional Grupo 5

Por tanto, el resultado final de la combinación es:

Alumnos ⊲⊳Alumnos.ID = Apoderados.ID_ALUMNO Apoderados

ID NOMBRE CIUDAD (alumno) (alumno)

EDAD

ID NOMBRE FONO (apoderado) (apoderado)

ID_ALUMNO

01

Pedro

Santiago

14

444

Paz

747423 01

11

Juan

Buenos Aires

18

457

José

454654 11

21

Diego

Lima

12

054

Víctor

654644 21

31

Rosita

Concepción 15

354

María

997455 31

Ahora, aquí debemos mostrar solo el nombre del alumno y el nombre del apoderado, esto lo hacemos con un Proyect o Proyección, donde la tabla final sería:

ΠAlumnos.NOMBRE,Apoderados.NOMBRE

NOMBRE (alumno) NOMBRE (apoderado)

Pedro

Paz

Juan

José

Diego

Víctor

12

Base de datos Modelo relacional Grupo 5

Resumiendo en un solo paso: Alumnos ⊲⊳Alumnos.ID = Apoderados.ID_ALUMNO Apoderados Se lee: Proyecta los nombre de alumnos y nombre de apoderados de los alumnos cuyo ID sea el mismo que el ID_ALUMNO de los apoderados.

Operaciones del álgebra relacional extendida
Las operaciones básicas del álgebra relacional se han ampliado de varias maneras. Una ampliación sencilla es permitir operaciones aritméticas como parte de la proyección. Una ampliación importante es permitir operaciones de agregación, como el cálculo de la suma de los elementos de un conjunto, o su media. Otra ampliación importante es la operación reunión externa, que permite a las expresiones del álgebra relacional trabajar con los valores nulos que modelan la información que falta. Proyección generalizada La operación proyección generalizada amplía la operación proyección permitiendo que se utilicen funciones aritméticas en la lista de proyección. La operación proyección generalizada tiene la forma ΠF1, F2, …, Fn (E) Donde E es cualquier expresión del álgebra relacional y F1, F2, …, Fn son expresiones aritméticas que incluyen constantes y atributos en el esquema de E. Como caso especial la expresión aritmética puede ser simplemente un atributo o una constante. Por ejemplo, supóngase que se dispone de una relación información-crédito, que da el límite de crédito y el importe dispuesto hasta el momento presente (el saldo-crédito de la cuenta). Si se desea averiguar el importe disponible por cada persona, se puede escribir la expresión siguiente: Πnombre-cliente, límite – saldo-crédito (información-crédito) El atributo resultante de la expresión límite – saldo-crédito no tiene un nombre. Se puede aplicar la operación renombramiento al resultado de la proyección generalizada para darle un nombre. Como conveniencia notacional, el renombramiento de atributos se puede combinar con la proyección generalizada como se ilustra a continuación: Πnombre-cliente, (límite – saldo-crédito) as crédito-disponible (información-crédito)
13

Base de datos Modelo relacional Grupo 5

Al segundo atributo de esta proyección generalizada se le ha dado el nombre créditodisponible.

Funciones de agregación
Las funciones de agregación son funciones que toman una colección de valores y devuelven como resultado un único valor. Por ejemplo, la función de agregación sum toma un conjunto de valores y devuelve la suma de los mismos. Por tanto, la función sum aplicada a la colección {1, 1, 3, 4, 4, 11} devuelve el valor 24. La función de agregación avg devuelve la media de los valores. Cuando se aplica al conjunto anterior devuelve el valor 4. La función de agregación count devuelve el número de elementos del conjunto, y devolvería 6 en el caso anterior. Otras funciones de agregación habituales son min y max, que devuelven el valor mínimo y el máximo de la colección; en el ejemplo anterior devuelven 1 y 11, respectivamente. Las colecciones en las que operan las funciones de agregación pueden tener valores repetidos; el orden en el que aparezcan los valores no tiene importancia. Estas colecciones se denominan multiconjuntos. Los conjuntos son un caso especial de los multiconjuntos, en los que sólo hay una copia de cada elemento. Para ilustrar el concepto de agregación se utilizará la relación trabajo-por-horas, que muestra los empleados a tiempo parcial. Supóngase que se desea averiguar la suma total de los sueldos de los empleados del banco a tiempo parcial. La expresión del álgebra relacional para esta consulta es: Gsum(sueldo) (trabajo-por-horas) La operación del álgebra relacional G significa que se debe aplicar agregación, y el subíndice indica la operación de agregación a aplicar. El resultado de la expresión anterior es una relación con un único atributo, que contiene una sola fila con un valor correspondiente a la suma de los sueldos de todos los trabajadores que trabajan en el banco a tiempo parcial. Hay casos en los que se deben borrar los valores repetidos antes de calcular una función de agregación. Si se desean borrar los valores repetidos hay que utilizar los mismos nombres de funciones que antes, con la cadena de texto «distinct» precedida de un guión añadida al final del nombre de la función (por ejemplo, count-distinct). La forma general de la operación de agregación G es la siguiente:
G1, G2, …, GnGF1(A1), F2(A2), …, Fm (Am)

(E)

donde E es cualquier expresión del álgebra relacional; G1, G2, …, Gn constituye una lista de atributos que indican cómo se realiza la agrupación, cada Fi es una función de agregación y cada Ai es el nombre de un atributo.

14

Base de datos Modelo relacional Grupo 5

El significado de la operación se define de la manera siguiente. Las tuplas en el resultado de la expresión E se dividen en grupos tales que 1. Todas las tuplas del grupo tienen los mismos valores para G1, G2, …, Gn. 2. Las tuplas de grupos diferentes tienen valores diferentes para G1, G2, …, Gn. Por tanto, los grupos pueden identificarse por el valor de los atributos G1, G2, …, Gn. Para cada grupo (g1, g2, …, gn) el resultado tiene una tupla (g1, g2, …, gn, a1, a2, …, am) donde, para cada i, ai es el resultado de aplicar la función de agregación Fi al multiconjunto de valores del atributo Ai en el grupo. Como caso especial de la operación de agregación, la lista de atributos G1, G2, …, Gn puede estar vacía, en cuyo caso sólo hay un grupo que contiene todas las tuplas de la relación. Esto corresponde a la agregación sin agrupación.

Los Valores Nulos En El Modelo Relacional
Se puede definir el valor nulo como una marca utilizada para representar información desconocida. La necesidad de valores nulos es evidente por diversas razones:    Existencia de tuplas con ciertos atributos desconocidos en ese momento. Necesidad de añadir un nuevo atributo a una tabla ya existente; atributo que en el momento de introducirse no tendrá ningún valor para las tuplas de la relación. Posibilidad de atributos inaplicables a ciertas tuplas, como la editorial para un artículo.

Modificación de la Base de datos
El modelo relacional cuenta con módulos DDL, para la definición de datos que nos permite crear o modificar la estructura de las tablas. Las instrucciones para realizar estas operaciones son: CREATE TABLE: Nos permite crear una tabla de datos vacía. INSERT: Permite almacenar registros en una tabla creada. UPDATE: Permite modificar datos de registros almacenados en la tabla. DELETE: Borra un registro entero o grupo de registros de una tabla. CREATE INDEX: Crea un índice que nos puede auxiliar para las consultas. DROP TABLE: Permite borrar una tabla. DROP INDEX: Borra el índice indicado.

15

Base de datos Modelo relacional Grupo 5

Para ejemplificar las instrucciones anteriores consideremos el ejemplo ALUMNO cursa - MATERIA, que tienen los siguientes atributos: NControl NControl Clave NombreA Clave NombreM Especialidad Calif Creditos Dirección * Estructura de la sentencia CREATE TABLE. CREATE TABLE <Nombre de la tabla> ( Atributo1: tipo de dato longitud, Atributo2: tipo de dato longitud, Atributo3: tipo de dato longitud, : : Atributon: tipo de dato longitud, PRIMARY KEY (Opcional)); Los campos pueden definirse como NOT NULL de manera opcional excepto en la llave primaria para lo cual es obligatorio. Además al definir la llave primaria se genera automáticamente un índice con respecto al campo llave; para definir la llave la denotamos dentro de los paréntesis de PRIMARY KEY. Ejemplo: Crear la tabla alumno con los atributos antes descritos, tomando como llave el numero de control. CREATE TABLE Alumno ( NControl char(8) NOT NULL, NombreA char(20), Especialidad char(3), Dirección char(30), PRIMARY KEY (NControl) );

16

Base de datos Modelo relacional Grupo 5

Tabla Alumno: NControl NombreA Especialidad Dirección

Puede existir más de una llave primaria, esto es si se requiere, se crearán tantos índices como llaves primarias se establezcan. Pueden existir tantos campos Not Null (No nulos) como se requieran; En si estructurar la creación de una tabla es siempre parecida al ejemplo anterior. * Estructura de la sentencia INSERT INSERT INTO Nombre de la tabla a la que se le va a insertar el registro VALUES (Conjunto de valores del registro) ; Ejemplo: Insertar en la tabla Alumno, antes creada los datos del alumno Daniel colín, con numero de control 95310518 de la especialidad de Ingeniería civil, con domicilio Abasolo Norte #45. INSERT INTO Alumno VALUES ("95310518","Daniel Colín","IC","Abasolo Norte #45") ; Nótese que la inserción de los datos se realiza conforme la estructura que se implanto en la tabla, es decir en el orden en que se creo dicha tabla. En caso de querer omitir un dato que no sean no nulos solamente se ponen las comillas indicando el vacío de la cadena. * Estructura de la Sentencia CREATE INDEX CREATE INDEX Nombre que se le asignara al índice. ON Nombre de la taba a la cual se le creara el índice (Campo(s) por el cual se creara el índice); Ejemplo: Crear un índice de la tabla Alumno por el campo Especialidad. CREATE INDEX Indice1 ON Alumno (Especialidad);
17

Base de datos Modelo relacional Grupo 5

Este índice contendrá a todos los alumnos ordenados por el campo especialidad. CREATE INDEX UNIQUE INDEX Indice2 ON Alumno (Especialidad); En la creación de este índice utilizamos la sentencia UNIQUE, es un indicador para permitir que se cree un índice único por especialidad, esta sentencia siempre se coloca antes de CREATE INDEX. En este ejemplo se creara un índice que contenga un alumno por especialidad existente. * Estructura de la sentencia UPDATE UPDATE Nombre de la tabla en donde se modificaran los datos. SET Valores WHERE (Condición); Ejemplo: Modificar el número de control del registro de Daniel Colín de la Tabla alumno por el número 96310518. UPDATE Alumno SET NControl ‘96310518’ WHERE NombreA=’Daniel Colín’; * Estructura de la sentencia DROP TABLE DROP TABLE Nombre de la tabla a borrar; Ejemplo: Borrar la tabla Alumno creada anteriormente. DROP TABLE Alumno; * Estructura de la sentencia DROP INDEX DROP INDEX Nombre del índice a borrar; Ejemplo: Borrar el índice Indice1 creado anteriormente. DROP INDEX Indice1;
18

Base de datos Modelo relacional Grupo 5

* Estructura de la sentencia DELETE DELETE FROM Nombre de la tabla WHERE Condición; Ejemplos: - Borrar el registro cuyo número de control es 95310386. DELETE FROM Alumno WHERE Control=’95310386’; - Borrar todos los registros de la tabla alumno. DELETE FROM Alumno; En el primer ejemplo, se borrara todo el registro (todos los datos), del alumno con número de control = 95310386. En el segundo ejemplo se borraran todos los registros de la tabla alumno, pero sin borrar la estructura de la tabla, ya que la orden Delete solo borra registros, la sentencia Drop Table es la que borra toda la estructura de la tabla junto con los registros de la misma

19

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->