SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
FACULTAD DE INGENIERÍA Y GESTIÓN
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
TAREA - ANÁLISIS “DICCIONARIO DE DATOS”
CURSO:
GESTIÓN DE BASE DE DATOS
DOCENTE:
Blas Rebaza, Maruja Emelita
ALUMNO:
Tafur Meneses Andy, CÓDIGO 2113110182
Villa El Salvador
2023
El código a analizar es el siguiente:
USE Matricula;
SELECT
d.object_id,
a.name [table], -- Identificará la Tabla
b.name [column], -- Identificará la columna
c.name [type], -- Identificará el Tipo
CASE -- Recibe el tipo de columna
-- Cuando c es 'numeric', 'decimal', o 'float', entonces se precisa el número
WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float' THEN b.precision
ELSE NULL
END [Precision],
-- Recibe el tamaño máximo de b
b.max_length,
CASE -- Recibe si la columna acepta nulos
WHEN b.is_nullable = 0 THEN 'NO'
ELSE 'SI'
END [Permite Nulos],
CASE -- Recibe si la columna es identity (autoincrementable)
WHEN b.is_identity = 0 THEN 'NO'
ELSE 'SI'
END [Es Autonumérico],
ep.value [Descripción], -- Recibe la descripción de la columna (si la hay)
f.ForeignKey, -- Recibe si es llave foránea
f.ReferenceTableName, -- Recibe la referencia de la tabla
f.ReferenceColumnName -- Recibe la referencia de la columna
FROM sys.tables a
-- // Selecciona y muestra toda la información 
INNER JOIN sys.columns b ON a.object_id = b.object_id
INNER JOIN sys.systypes c ON b.system_type_id = c.xtype
INNER JOIN sys.objects d ON a.object_id = d.object_id
LEFT JOIN sys.extended_properties ep ON d.object_id = ep.major_id AND b.column_Id =
ep.minor_id
LEFT JOIN (
SELECT
f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS
ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
) f ON f.TableName = a.name AND f.ColumnName = b.name
WHERE a.name <> 'sysdiagrams'
ORDER BY a.name, b.column_Id;
Al correr el código tenemos:
El código que mostré se utiliza para extraer información sobre las estructuras de las tablas y
columnas dentro de la base de datos "Matricula" en un servidor SQL Server. Puede ser
utilizado para obtener detalles como nombres de tablas, nombres de columnas, tipos de
datos, restricciones, propiedades de las columnas, entre otros aspectos relacionados con la
base de datos.
Explicación:
use Matricula
La instrucción "use …" es una declaración SQL que se utiliza para seleccionar una
base de datos específica; esto es útil cuando trabajas con múltiples bases de datos
en un servidor de SQL Server y necesitas indicar en cuál de ellas deseas ejecutar tus
consultas y comandos. En este caso, "Matricula" es el nombre de la base de datos
que se desea utilizar.
select
d.object_id,
a.name [table],
b.name [column],
c.name [type],
La sentencia "select" trabaja con varias tablas y vistas del sistema para recuperar
información específica sobre las tablas y columnas en la base de datos "Matricula";
trabaja en conjunto con "FROM sys.tables a", esto lo veremos más adelante.
La tabla 'a' hace referencia a la vista del sistema 'sys.tables', la cual almacena
información acerca de todas las tablas en la base de datos. 'a.name' se refiere a la
columna 'name' de la vista 'a', que contiene los nombres de todas las tablas. El alias
'[table]' se utiliza para renombrar la columna 'name'.
La tabla 'b' hace referencia a la vista del sistema 'sys.columns', que contiene
información sobre las columnas de todas las tablas en la base de datos. 'b.name' se
refiere a la columna 'name' de la vista 'b', que almacena los nombres de las
columnas. El alias '[column]' se utiliza para renombrar la columna 'name'.
La tabla 'c' se refiere a la vista del sistema 'sys.systypes', que contiene información
sobre los tipos de datos utilizados en las columnas de las tablas de la base de
datos. 'c.name' se refiere a la columna 'name' de la vista 'c', que almacena los
nombres de los tipos de datos. El alias '[type]' se renombrar la columna 'name'.
La tabla 'd' hace referencia a la vista del sistema 'sys.objects', que contiene
información sobre diversos objetos en la base de datos. 'object_id' es un
identificador único que se asocia a cada objeto en la base de datos. No se utiliza
necesariamente para identificar objetos específicos en la consulta, sino que se
incluye en los resultados de la consulta como parte de la información relacionada
con las tablas y columnas.
CASE
WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float' THEN b.precision
ELSE null
END [Precision],
Se coloca "CASE" al iniciar evaluaciones condicionales en SQL.
Con "WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float'" se
establece una condición. Si el valor de "c.name" es igual a "numeric," o igual a
"decimal," o igual a "float," entonces la condición se cumple. Esto significa que
estamos buscando columnas que tengan tipos de dato numéricos o de punto
flotante.
Con "THEN b.precision", si la condición es verdadera se tomará la acción
especificada después de "THEN". En este caso, la acción es devolver el valor de
b.precision, que es la precisión de la columna. La precisión generalmente se refiere
a la cantidad de dígitos que pueden almacenarse en la columna para los tipos de
datos numéricos y de punto flotante.
Con "ELSE null", si la condición no se cumple entonces se utiliza NULL, que es un
valor especial en SQL que indica la ausencia de un valor concreto.
Se coloca "END" para finalizar la expresión "CASE" y, en este caso, se le asigna un
alias "[Precision]" al resultado.
b.max_length,
Como ya sabemos, la tabla 'b' hace referencia a la vista del sistema 'sys.columns',
que contiene información sobre las columnas de todas las tablas en la base de
datos. 'b.max_length' se refiere a la columna 'max_length' de la vista 'b'; este campo
almacena información sobre la longitud máxima permitida para las columnas de
tipos de datos de caracteres, como char o varchar.
CASE
WHEN b.is_nullable = 0 THEN 'NO'
ELSE 'SI'
END [Permite Nulls],
Como sabemos, se coloca "CASE" al iniciar evaluaciones condicionales en SQL.
En "WHEN b.is_nullable = 0 THEN 'NO'", "WHEN" se encarga de establecer la
condición como tal; en "b.is_nullable = 0" notamos que el campo "is_nullable" es un
campo de "b", o sea de la vista "sys.columns", y se utiliza para indicar si una columna
permite valores nulos. Si "is_nullable" es igual a 0, significa que la columna no
permite valores nulos.
"THEN" se ejecuta si la condición "WHEN" es verdadera, y se devuelve la cadena de
texto 'NO'. Esto indica que no se permiten valores nulos en la columna.
"ELSE" se ejecuta si la condición "WHEN" no se cumple, y se devuelve la cadena de
texto 'SI'. Esto indica que se permiten valores nulos en la columna.
Como sabemos, se coloca "END" para finalizar la expresión "CASE" y, en este caso,
se le asigna un alias "[Permite Nulls]" al resultado.
CASE
WHEN b.is_identity = 0 THEN 'NO'
ELSE 'SI'
END [Es Autonumerico],
Como sabemos, se coloca "CASE" al iniciar evaluaciones condicionales en SQL.
En "WHEN b.is_identity = 0 THEN 'NO'", "WHEN" se encarga de establecer la
condición como tal; en "b.is_identity" notamos que el campo "is_identity" es un
campo de "b", es decir, de la vista "sys.columns", y se utiliza para indicar si la
columna es una columna de identidad (también conocida como columna
autoincrementable). Si "is_identity" es igual a 0, significa que la columna no es una
columna de identidad.
"THEN" se ejecuta si la condición "WHEN" es verdadera, y se devuelve la cadena de
texto 'NO'. Esto indica que la columna no es una columna de identidad (no es
autoincrementable).
"ELSE" se ejecuta si la condición "WHEN" no se cumple, y se devuelve la cadena de
texto 'SI'. Esto indica que la columna es una columna de identidad (es
autoincrementable).
Como sabemos, se coloca "END" para finalizar la expresión "CASE" y, en este caso,
se le asigna un alias "[Es Autonumerico]" al resultado.
ep.value [Descripcion],
En esta parte de la consulta, "ep.value" se utiliza para obtener el valor asociado con
una propiedad extendida (extended property) de una columna. Esta propiedad
extendida generalmente se utiliza para almacenar una descripción o comentario
adicional relacionado con la columna.
Una "descripción" se refiere a una explicación o comentario adicional que se adjunta a
la columna para proporcionar información adicional sobre su propósito o contenido.
Esta descripción no afecta directamente a los datos almacenados en la columna, pero
puede ser útil para los usuarios y los desarrolladores que trabajan con la base de datos
para comprender mejor la estructura y el significado de la columna.
Finalmente, el alias [Descripcion] se asigna a este valor recuperado en los resultados
de la consulta.
f.ForeignKey,
f.ReferenceTableName,
f.ReferenceColumnName
"f.ForeignKey": Indica si la columna es una clave foránea (foreign key).
"f.ReferenceTableName": Muestra el nombre de la tabla a la que la columna hace
referencia en caso de ser clave foránea.
"f.ReferenceColumnName": Muestra el nombre de la columna de la tabla de referencia
a la que la columna actual se relaciona si es clave foránea.
Pequeña ilustración de la diferencia entre llave primaria (primary key) y llave foránea
(foreign key):
FROM sys.tables a
La cláusula "FROM" se utiliza para especificar la(s) tabla(s) de las cuales deseas
recuperar datos. Es decir, defines las fuentes de datos que se utilizarán en la
consulta.
Como sabemos, "sys.tables" es una tabla del sistema en SQL Server que almacena
información sobre todas las tablas de la base de datos actual, como sus nombres,
identificadores únicos de objetos (object_id), esquemas, fechas de creación y otras
propiedades.
"a" es un alias que se utiliza para hacer referencia a la tabla "sys.tables" dentro de la
consulta.
inner join sys.columns b on a.object_id= b.object_id
inner join sys.systypes c on b.system_type_id= c.xtype
inner join sys.objects d on a.object_id= d.object_id
LEFT JOIN sys.extended_properties ep ON d.object_id = ep.major_id AND
b.column_Id = ep.minor_id
LEFT JOIN (
SELECT
f.name AS ForeignKey,
OBJECT_NAME (f.parent_object_id) AS TableName,
COL_NAME (fc.parent_object_id,fc.parent_column_id) AS
ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME (fc.referenced_object_id,fc.referenced_column_id) AS
ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID =
fc.constraint_object_id) f ON f.TableName =a.name AND f.ColumnName =b.name
Las operaciones "INNER JOIN" se utilizan para combinar datos de varias vistas del
sistema.
En "INNER JOIN sys.columns b ON a.object_id = b.object_id", "INNER JOIN" relaciona
la tabla "sys.tables" (representada por el alias "a") con la vista "sys.columns"
(representada por el alias "b") utilizando una condición de igualdad en el campo
"object_id". Esto significa que para cada tabla en la base de datos (representada por
"a"), se unen todas las columnas correspondientes (representadas por "b") que
tienen el mismo "object_id". Esto vincula cada tabla a sus columnas respectivas.
En "INNER JOIN sys.systypes c ON b.system_type_id = c.xtype", "INNER JOIN"
relaciona la vista "sys.columns" (representada por el alias "b") con la vista
"sys.systypes" (representada por el alias "c") mediante una condición de igualdad en
el campo "system_type_id" de "b" y el campo "xtype" de "c". Esto permite obtener
información detallada sobre los tipos de datos de las columnas, ya que "c" contiene
detalles sobre los tipos de datos en la base de datos.
"system_type_id" almacena un identificador numérico que representa el tipo de dato
subyacente de una columna, mientras que "c.xtype" contiene una cadena de caracteres
que representa el nombre del tipo de dato.
En "INNER JOIN sys.objects d ON a.object_id = d.object_id", "INNER JOIN" relaciona
nuevamente la tabla "sys.tables" (representada por el alias "a") con la vista
"sys.objects" (representada por el alias "d") utilizando el campo "object_id". Esto
proporciona información adicional sobre los objetos relacionados con las tablas,
como su fecha de creación y otros detalles. En esencia, vincula cada tabla a la
información relacionada con sus objetos en la base de datos.
En un "LEFT JOIN", todas las filas de la tabla de la izquierda ("d" y "b" en este caso)
se incluyen en los resultados, incluso si no tienen coincidencias en la tabla de la
derecha ("ep"). Esto asegura que todas las tablas y columnas se muestren en los
resultados, La vista "sys.extended_properties" almacena información adicional o
propiedades extendidas relacionadas con objetos en la base de datos, le asignamos
el alias "ep".
En "ON d.object_id = ep.major_id AND b.column_Id = ep.minor_id", se establece las
condiciones de unión entre las tablas "d" y "b" con las propiedades extendidas en
"ep". Las condiciones de unión indican cómo relacionar las filas de las tablas "d" y
"b" con las filas correspondientes en "ep".
En "d.object_id = ep.major_id" se establece una relación entre los objetos principales
(generalmente tablas) representados por "d" y las propiedades extendidas
almacenadas en "ep". El "object_id" de "d" se compara con el "major_id" de "ep" para
vincular las propiedades extendidas con las tablas correctas en la base de datos.
En "b.column_Id = ep.minor_id" se vincula columnas específicas representadas por b
con las propiedades extendidas correspondientes en "ep". El "column_Id" de "b" se
compara con el "minor_id" de "ep" para garantizar que las propiedades extendidas se
relacionen con las columnas específicas de manera precisa.
`LEFT JOIN (...) f`: Utilizamos un "LEFT JOIN" para combinar la tabla principal con
una subconsulta (identificada como "f") que recuperará detalles sobre las claves
foráneas y sus relaciones con tablas en la base de datos.
`SELECT f.name AS ForeignKey, ...`: En la subconsulta, seleccionamos ciertos datos
relacionados con las claves foráneas. Esto incluye el nombre de la clave foránea
("ForeignKey"), el nombre de la tabla principal ("TableName"), el nombre de la
columna que actúa como clave foránea ("ColumnName"), el nombre de la tabla de
referencia ("ReferenceTableName") y el nombre de la columna en la tabla de
referencia que está relacionada con la clave foránea ("ReferenceColumnName").
OBJECT_NAME(f.parent_object_id) AS TableName: Esta expresión obtiene el
nombre de la tabla principal (donde se encuentra la clave foránea) usando el
"parent_object_id" de la clave foránea. Luego, asigna este nombre a un alias llamado
"TableName". Esto nos permite conocer la tabla principal involucrada en la relación
de clave foránea.
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName: Aquí, se
obtiene el nombre de la columna específica en la tabla principal que actúa como
clave foránea. Se hace usando el "parent_object_id" y "parent_column_id" de la clave
foránea y luego asignando ese nombre a un alias llamado "ColumnName". Esto
identifica la columna que establece la relación de clave foránea.
OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName: Esta parte extrae
el nombre de la tabla de referencia (la tabla relacionada) utilizando el
"referenced_object_id" de la clave foránea. El resultado se guarda en un alias
llamado "ReferenceTableName". Esto nos informa sobre la tabla a la que se hace
referencia en la relación de clave foránea.
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS
ReferenceColumnName: Similar al punto anterior, esta expresión obtiene el nombre
de la columna en la tabla de referencia que se relaciona con la clave foránea. Se
hace utilizando el "referenced_object_id" y "referenced_column_id" de la clave
foránea y se asigna a un alias llamado "ReferenceColumnName". Esto identifica la
columna en la tabla de referencia que está conectada a través de la clave foránea.
En conjunto, estas partes de la subconsulta proporcionan detalles esenciales sobre
las relaciones de clave foránea, incluyendo los nombres de las tablas principales y
de referencia, así como las columnas involucradas en la base de datos.
`FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON
f.OBJECT_ID = fc.constraint_object_id`: En esta parte, especificamos de dónde
provienen los datos de la subconsulta. La subconsulta utiliza las vistas
"sys.foreign_keys" (alias "f") y "sys.foreign_key_columns" (alias "fc") para obtener
información sobre las claves foráneas y las columnas que están relacionadas con
ellas. La unión entre estas dos vistas se realiza mediante el campo "OBJECT_ID" de
"f" y el campo "constraint_object_id" de "fc", lo que establece la relación entre las
claves foráneas y las columnas involucradas.
`f ON f.TableName = a.name AND f.ColumnName = b.name`: Finalmente, utilizamos
esta parte para unir la subconsulta "f" con las tablas principales en la consulta
principal. Aquí es donde se establecen las conexiones entre las claves foráneas
recuperadas y las tablas y columnas en la base de datos principal. Se relacionan a
través de los nombres de tabla ("TableName") y nombres de columna
("ColumnName"), lo que nos permite obtener una visión completa de las relaciones
de clave foránea en la base de datos principal.
WHERE a.name <> 'sysdiagrams'
ORDER BY a.name,b.column_Id
WHERE a.name <> 'sysdiagrams': En esta parte filtra las filas donde el nombre de la
tabla en la base de datos principal (a.name) no sea igual a 'sysdiagrams'. En otras
palabras, excluye las tablas con el nombre 'sysdiagrams' de los resultados.
ORDER BY a.name, b.column_Id: Ordena los resultados primero por el nombre de la
tabla (a.name) en orden ascendente y, luego, por el identificador de columna
(b.column_Id) en orden ascendente. Esto organiza la salida de la consulta en función
de estos dos criterios.

Más contenido relacionado

Similar a Análisis del Diccionario de Datos de la Base de Datos Matricula

Manual MySQL.pdf
Manual MySQL.pdfManual MySQL.pdf
Manual MySQL.pdfquesadah
 
Tipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServerTipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServerjcalvopa
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visualBryanChacon12
 
EJERCICIO SENTENCIAS SQL_Completo.pdf
EJERCICIO SENTENCIAS SQL_Completo.pdfEJERCICIO SENTENCIAS SQL_Completo.pdf
EJERCICIO SENTENCIAS SQL_Completo.pdfBLANCAGESTRADARENTER
 
Comandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portalComandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portaleavila5
 
05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql ProfundizacionKudos S.A.S
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDLbdatos
 
Bases De Datos My Sql
Bases De Datos My SqlBases De Datos My Sql
Bases De Datos My SqlArnulfo Gomez
 
Consultas en SQL Server
Consultas en SQL ServerConsultas en SQL Server
Consultas en SQL ServerKareliaRivas
 
18 tipos-de-datos
18 tipos-de-datos18 tipos-de-datos
18 tipos-de-datosAndy T
 
Tablas en SQL Server
Tablas en SQL ServerTablas en SQL Server
Tablas en SQL ServerKareliaRivas
 

Similar a Análisis del Diccionario de Datos de la Base de Datos Matricula (20)

Operaciones basicas de sql
Operaciones basicas de sqlOperaciones basicas de sql
Operaciones basicas de sql
 
210927124637-Manual MySQL.pdf
210927124637-Manual MySQL.pdf210927124637-Manual MySQL.pdf
210927124637-Manual MySQL.pdf
 
Manual MySQL.pdf
Manual MySQL.pdfManual MySQL.pdf
Manual MySQL.pdf
 
Tipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServerTipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServer
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visual
 
Sql Sentencias
Sql Sentencias Sql Sentencias
Sql Sentencias
 
EJERCICIO SENTENCIAS SQL_Completo.pdf
EJERCICIO SENTENCIAS SQL_Completo.pdfEJERCICIO SENTENCIAS SQL_Completo.pdf
EJERCICIO SENTENCIAS SQL_Completo.pdf
 
Sql básico - compendio
Sql básico  - compendioSql básico  - compendio
Sql básico - compendio
 
Comandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portalComandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portal
 
comandos-mysql.pdf
comandos-mysql.pdfcomandos-mysql.pdf
comandos-mysql.pdf
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
Clase 2 El lenguaje DDL de SQL
Clase 2 El lenguaje DDL de SQLClase 2 El lenguaje DDL de SQL
Clase 2 El lenguaje DDL de SQL
 
05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql Profundizacion
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDL
 
Bases De Datos My Sql
Bases De Datos My SqlBases De Datos My Sql
Bases De Datos My Sql
 
Consultas en SQL Server
Consultas en SQL ServerConsultas en SQL Server
Consultas en SQL Server
 
Select
SelectSelect
Select
 
Indices en workbench
Indices en workbenchIndices en workbench
Indices en workbench
 
18 tipos-de-datos
18 tipos-de-datos18 tipos-de-datos
18 tipos-de-datos
 
Tablas en SQL Server
Tablas en SQL ServerTablas en SQL Server
Tablas en SQL Server
 

Último

Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZgustavoiashalom
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesCarlosMeraz16
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfbcondort
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajasjuanprv
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 

Último (20)

Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 

Análisis del Diccionario de Datos de la Base de Datos Matricula

  • 1. UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR FACULTAD DE INGENIERÍA Y GESTIÓN ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS TAREA - ANÁLISIS “DICCIONARIO DE DATOS” CURSO: GESTIÓN DE BASE DE DATOS DOCENTE: Blas Rebaza, Maruja Emelita ALUMNO: Tafur Meneses Andy, CÓDIGO 2113110182 Villa El Salvador 2023
  • 2. El código a analizar es el siguiente: USE Matricula; SELECT d.object_id, a.name [table], -- Identificará la Tabla b.name [column], -- Identificará la columna c.name [type], -- Identificará el Tipo CASE -- Recibe el tipo de columna -- Cuando c es 'numeric', 'decimal', o 'float', entonces se precisa el número WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float' THEN b.precision ELSE NULL END [Precision], -- Recibe el tamaño máximo de b b.max_length, CASE -- Recibe si la columna acepta nulos WHEN b.is_nullable = 0 THEN 'NO'
  • 3. ELSE 'SI' END [Permite Nulos], CASE -- Recibe si la columna es identity (autoincrementable) WHEN b.is_identity = 0 THEN 'NO' ELSE 'SI' END [Es Autonumérico], ep.value [Descripción], -- Recibe la descripción de la columna (si la hay) f.ForeignKey, -- Recibe si es llave foránea f.ReferenceTableName, -- Recibe la referencia de la tabla f.ReferenceColumnName -- Recibe la referencia de la columna FROM sys.tables a -- // Selecciona y muestra toda la información INNER JOIN sys.columns b ON a.object_id = b.object_id INNER JOIN sys.systypes c ON b.system_type_id = c.xtype INNER JOIN sys.objects d ON a.object_id = d.object_id LEFT JOIN sys.extended_properties ep ON d.object_id = ep.major_id AND b.column_Id = ep.minor_id LEFT JOIN (
  • 4. SELECT f.name AS ForeignKey, OBJECT_NAME(f.parent_object_id) AS TableName, COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName, OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName, COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id ) f ON f.TableName = a.name AND f.ColumnName = b.name WHERE a.name <> 'sysdiagrams' ORDER BY a.name, b.column_Id;
  • 5. Al correr el código tenemos: El código que mostré se utiliza para extraer información sobre las estructuras de las tablas y columnas dentro de la base de datos "Matricula" en un servidor SQL Server. Puede ser utilizado para obtener detalles como nombres de tablas, nombres de columnas, tipos de datos, restricciones, propiedades de las columnas, entre otros aspectos relacionados con la base de datos. Explicación: use Matricula
  • 6. La instrucción "use …" es una declaración SQL que se utiliza para seleccionar una base de datos específica; esto es útil cuando trabajas con múltiples bases de datos en un servidor de SQL Server y necesitas indicar en cuál de ellas deseas ejecutar tus consultas y comandos. En este caso, "Matricula" es el nombre de la base de datos que se desea utilizar. select d.object_id, a.name [table], b.name [column], c.name [type], La sentencia "select" trabaja con varias tablas y vistas del sistema para recuperar información específica sobre las tablas y columnas en la base de datos "Matricula"; trabaja en conjunto con "FROM sys.tables a", esto lo veremos más adelante. La tabla 'a' hace referencia a la vista del sistema 'sys.tables', la cual almacena información acerca de todas las tablas en la base de datos. 'a.name' se refiere a la columna 'name' de la vista 'a', que contiene los nombres de todas las tablas. El alias '[table]' se utiliza para renombrar la columna 'name'. La tabla 'b' hace referencia a la vista del sistema 'sys.columns', que contiene información sobre las columnas de todas las tablas en la base de datos. 'b.name' se
  • 7. refiere a la columna 'name' de la vista 'b', que almacena los nombres de las columnas. El alias '[column]' se utiliza para renombrar la columna 'name'. La tabla 'c' se refiere a la vista del sistema 'sys.systypes', que contiene información sobre los tipos de datos utilizados en las columnas de las tablas de la base de datos. 'c.name' se refiere a la columna 'name' de la vista 'c', que almacena los nombres de los tipos de datos. El alias '[type]' se renombrar la columna 'name'. La tabla 'd' hace referencia a la vista del sistema 'sys.objects', que contiene información sobre diversos objetos en la base de datos. 'object_id' es un identificador único que se asocia a cada objeto en la base de datos. No se utiliza necesariamente para identificar objetos específicos en la consulta, sino que se incluye en los resultados de la consulta como parte de la información relacionada con las tablas y columnas. CASE WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float' THEN b.precision ELSE null END [Precision], Se coloca "CASE" al iniciar evaluaciones condicionales en SQL.
  • 8. Con "WHEN c.name = 'numeric' OR c.name = 'decimal' OR c.name = 'float'" se establece una condición. Si el valor de "c.name" es igual a "numeric," o igual a "decimal," o igual a "float," entonces la condición se cumple. Esto significa que estamos buscando columnas que tengan tipos de dato numéricos o de punto flotante. Con "THEN b.precision", si la condición es verdadera se tomará la acción especificada después de "THEN". En este caso, la acción es devolver el valor de b.precision, que es la precisión de la columna. La precisión generalmente se refiere a la cantidad de dígitos que pueden almacenarse en la columna para los tipos de datos numéricos y de punto flotante. Con "ELSE null", si la condición no se cumple entonces se utiliza NULL, que es un valor especial en SQL que indica la ausencia de un valor concreto. Se coloca "END" para finalizar la expresión "CASE" y, en este caso, se le asigna un alias "[Precision]" al resultado. b.max_length, Como ya sabemos, la tabla 'b' hace referencia a la vista del sistema 'sys.columns', que contiene información sobre las columnas de todas las tablas en la base de datos. 'b.max_length' se refiere a la columna 'max_length' de la vista 'b'; este campo almacena información sobre la longitud máxima permitida para las columnas de tipos de datos de caracteres, como char o varchar.
  • 9. CASE WHEN b.is_nullable = 0 THEN 'NO' ELSE 'SI' END [Permite Nulls], Como sabemos, se coloca "CASE" al iniciar evaluaciones condicionales en SQL. En "WHEN b.is_nullable = 0 THEN 'NO'", "WHEN" se encarga de establecer la condición como tal; en "b.is_nullable = 0" notamos que el campo "is_nullable" es un campo de "b", o sea de la vista "sys.columns", y se utiliza para indicar si una columna permite valores nulos. Si "is_nullable" es igual a 0, significa que la columna no permite valores nulos. "THEN" se ejecuta si la condición "WHEN" es verdadera, y se devuelve la cadena de texto 'NO'. Esto indica que no se permiten valores nulos en la columna. "ELSE" se ejecuta si la condición "WHEN" no se cumple, y se devuelve la cadena de texto 'SI'. Esto indica que se permiten valores nulos en la columna. Como sabemos, se coloca "END" para finalizar la expresión "CASE" y, en este caso, se le asigna un alias "[Permite Nulls]" al resultado. CASE
  • 10. WHEN b.is_identity = 0 THEN 'NO' ELSE 'SI' END [Es Autonumerico], Como sabemos, se coloca "CASE" al iniciar evaluaciones condicionales en SQL. En "WHEN b.is_identity = 0 THEN 'NO'", "WHEN" se encarga de establecer la condición como tal; en "b.is_identity" notamos que el campo "is_identity" es un campo de "b", es decir, de la vista "sys.columns", y se utiliza para indicar si la columna es una columna de identidad (también conocida como columna autoincrementable). Si "is_identity" es igual a 0, significa que la columna no es una columna de identidad. "THEN" se ejecuta si la condición "WHEN" es verdadera, y se devuelve la cadena de texto 'NO'. Esto indica que la columna no es una columna de identidad (no es autoincrementable). "ELSE" se ejecuta si la condición "WHEN" no se cumple, y se devuelve la cadena de texto 'SI'. Esto indica que la columna es una columna de identidad (es autoincrementable). Como sabemos, se coloca "END" para finalizar la expresión "CASE" y, en este caso, se le asigna un alias "[Es Autonumerico]" al resultado. ep.value [Descripcion],
  • 11. En esta parte de la consulta, "ep.value" se utiliza para obtener el valor asociado con una propiedad extendida (extended property) de una columna. Esta propiedad extendida generalmente se utiliza para almacenar una descripción o comentario adicional relacionado con la columna. Una "descripción" se refiere a una explicación o comentario adicional que se adjunta a la columna para proporcionar información adicional sobre su propósito o contenido. Esta descripción no afecta directamente a los datos almacenados en la columna, pero puede ser útil para los usuarios y los desarrolladores que trabajan con la base de datos para comprender mejor la estructura y el significado de la columna. Finalmente, el alias [Descripcion] se asigna a este valor recuperado en los resultados de la consulta. f.ForeignKey, f.ReferenceTableName, f.ReferenceColumnName "f.ForeignKey": Indica si la columna es una clave foránea (foreign key). "f.ReferenceTableName": Muestra el nombre de la tabla a la que la columna hace referencia en caso de ser clave foránea. "f.ReferenceColumnName": Muestra el nombre de la columna de la tabla de referencia a la que la columna actual se relaciona si es clave foránea.
  • 12. Pequeña ilustración de la diferencia entre llave primaria (primary key) y llave foránea (foreign key): FROM sys.tables a La cláusula "FROM" se utiliza para especificar la(s) tabla(s) de las cuales deseas recuperar datos. Es decir, defines las fuentes de datos que se utilizarán en la consulta. Como sabemos, "sys.tables" es una tabla del sistema en SQL Server que almacena información sobre todas las tablas de la base de datos actual, como sus nombres, identificadores únicos de objetos (object_id), esquemas, fechas de creación y otras propiedades.
  • 13. "a" es un alias que se utiliza para hacer referencia a la tabla "sys.tables" dentro de la consulta. inner join sys.columns b on a.object_id= b.object_id inner join sys.systypes c on b.system_type_id= c.xtype inner join sys.objects d on a.object_id= d.object_id LEFT JOIN sys.extended_properties ep ON d.object_id = ep.major_id AND b.column_Id = ep.minor_id LEFT JOIN ( SELECT f.name AS ForeignKey, OBJECT_NAME (f.parent_object_id) AS TableName, COL_NAME (fc.parent_object_id,fc.parent_column_id) AS ColumnName, OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, COL_NAME (fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName FROM sys.foreign_keys AS f
  • 14. INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id) f ON f.TableName =a.name AND f.ColumnName =b.name Las operaciones "INNER JOIN" se utilizan para combinar datos de varias vistas del sistema. En "INNER JOIN sys.columns b ON a.object_id = b.object_id", "INNER JOIN" relaciona la tabla "sys.tables" (representada por el alias "a") con la vista "sys.columns" (representada por el alias "b") utilizando una condición de igualdad en el campo "object_id". Esto significa que para cada tabla en la base de datos (representada por "a"), se unen todas las columnas correspondientes (representadas por "b") que tienen el mismo "object_id". Esto vincula cada tabla a sus columnas respectivas. En "INNER JOIN sys.systypes c ON b.system_type_id = c.xtype", "INNER JOIN" relaciona la vista "sys.columns" (representada por el alias "b") con la vista "sys.systypes" (representada por el alias "c") mediante una condición de igualdad en el campo "system_type_id" de "b" y el campo "xtype" de "c". Esto permite obtener información detallada sobre los tipos de datos de las columnas, ya que "c" contiene detalles sobre los tipos de datos en la base de datos. "system_type_id" almacena un identificador numérico que representa el tipo de dato subyacente de una columna, mientras que "c.xtype" contiene una cadena de caracteres que representa el nombre del tipo de dato. En "INNER JOIN sys.objects d ON a.object_id = d.object_id", "INNER JOIN" relaciona nuevamente la tabla "sys.tables" (representada por el alias "a") con la vista
  • 15. "sys.objects" (representada por el alias "d") utilizando el campo "object_id". Esto proporciona información adicional sobre los objetos relacionados con las tablas, como su fecha de creación y otros detalles. En esencia, vincula cada tabla a la información relacionada con sus objetos en la base de datos. En un "LEFT JOIN", todas las filas de la tabla de la izquierda ("d" y "b" en este caso) se incluyen en los resultados, incluso si no tienen coincidencias en la tabla de la derecha ("ep"). Esto asegura que todas las tablas y columnas se muestren en los resultados, La vista "sys.extended_properties" almacena información adicional o propiedades extendidas relacionadas con objetos en la base de datos, le asignamos el alias "ep". En "ON d.object_id = ep.major_id AND b.column_Id = ep.minor_id", se establece las condiciones de unión entre las tablas "d" y "b" con las propiedades extendidas en "ep". Las condiciones de unión indican cómo relacionar las filas de las tablas "d" y "b" con las filas correspondientes en "ep". En "d.object_id = ep.major_id" se establece una relación entre los objetos principales (generalmente tablas) representados por "d" y las propiedades extendidas almacenadas en "ep". El "object_id" de "d" se compara con el "major_id" de "ep" para vincular las propiedades extendidas con las tablas correctas en la base de datos. En "b.column_Id = ep.minor_id" se vincula columnas específicas representadas por b con las propiedades extendidas correspondientes en "ep". El "column_Id" de "b" se compara con el "minor_id" de "ep" para garantizar que las propiedades extendidas se relacionen con las columnas específicas de manera precisa.
  • 16. `LEFT JOIN (...) f`: Utilizamos un "LEFT JOIN" para combinar la tabla principal con una subconsulta (identificada como "f") que recuperará detalles sobre las claves foráneas y sus relaciones con tablas en la base de datos. `SELECT f.name AS ForeignKey, ...`: En la subconsulta, seleccionamos ciertos datos relacionados con las claves foráneas. Esto incluye el nombre de la clave foránea ("ForeignKey"), el nombre de la tabla principal ("TableName"), el nombre de la columna que actúa como clave foránea ("ColumnName"), el nombre de la tabla de referencia ("ReferenceTableName") y el nombre de la columna en la tabla de referencia que está relacionada con la clave foránea ("ReferenceColumnName"). OBJECT_NAME(f.parent_object_id) AS TableName: Esta expresión obtiene el nombre de la tabla principal (donde se encuentra la clave foránea) usando el "parent_object_id" de la clave foránea. Luego, asigna este nombre a un alias llamado "TableName". Esto nos permite conocer la tabla principal involucrada en la relación de clave foránea. COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName: Aquí, se obtiene el nombre de la columna específica en la tabla principal que actúa como clave foránea. Se hace usando el "parent_object_id" y "parent_column_id" de la clave foránea y luego asignando ese nombre a un alias llamado "ColumnName". Esto identifica la columna que establece la relación de clave foránea. OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName: Esta parte extrae el nombre de la tabla de referencia (la tabla relacionada) utilizando el "referenced_object_id" de la clave foránea. El resultado se guarda en un alias llamado "ReferenceTableName". Esto nos informa sobre la tabla a la que se hace
  • 17. referencia en la relación de clave foránea. COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName: Similar al punto anterior, esta expresión obtiene el nombre de la columna en la tabla de referencia que se relaciona con la clave foránea. Se hace utilizando el "referenced_object_id" y "referenced_column_id" de la clave foránea y se asigna a un alias llamado "ReferenceColumnName". Esto identifica la columna en la tabla de referencia que está conectada a través de la clave foránea. En conjunto, estas partes de la subconsulta proporcionan detalles esenciales sobre las relaciones de clave foránea, incluyendo los nombres de las tablas principales y de referencia, así como las columnas involucradas en la base de datos. `FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id`: En esta parte, especificamos de dónde provienen los datos de la subconsulta. La subconsulta utiliza las vistas "sys.foreign_keys" (alias "f") y "sys.foreign_key_columns" (alias "fc") para obtener información sobre las claves foráneas y las columnas que están relacionadas con ellas. La unión entre estas dos vistas se realiza mediante el campo "OBJECT_ID" de "f" y el campo "constraint_object_id" de "fc", lo que establece la relación entre las claves foráneas y las columnas involucradas. `f ON f.TableName = a.name AND f.ColumnName = b.name`: Finalmente, utilizamos esta parte para unir la subconsulta "f" con las tablas principales en la consulta principal. Aquí es donde se establecen las conexiones entre las claves foráneas recuperadas y las tablas y columnas en la base de datos principal. Se relacionan a través de los nombres de tabla ("TableName") y nombres de columna
  • 18. ("ColumnName"), lo que nos permite obtener una visión completa de las relaciones de clave foránea en la base de datos principal. WHERE a.name <> 'sysdiagrams' ORDER BY a.name,b.column_Id WHERE a.name <> 'sysdiagrams': En esta parte filtra las filas donde el nombre de la tabla en la base de datos principal (a.name) no sea igual a 'sysdiagrams'. En otras palabras, excluye las tablas con el nombre 'sysdiagrams' de los resultados. ORDER BY a.name, b.column_Id: Ordena los resultados primero por el nombre de la tabla (a.name) en orden ascendente y, luego, por el identificador de columna (b.column_Id) en orden ascendente. Esto organiza la salida de la consulta en función de estos dos criterios.