Consulta SQL para demostrar la anomalía de adición en la integridad referencial en una tabla

En SQL existe un concepto de integridad referencial . Esto significa que una clave externa puede tomar referencia de la clave principal de otra tabla. Existen básicamente 3 anomalías en este concepto. Aquí, discutimos sobre la anomalía de adición/inserción. Esto significa que si una entrada está ausente en la columna de clave principal de la tabla base, entonces no se puede ingresar en esta columna de clave externa de la tabla de destino. Esto se ilustra a continuación. Para este artículo, utilizaremos Microsoft SQL Server como nuestra base de datos.

Paso 1: crear una base de datos. Para esto, use el siguiente comando para crear una base de datos llamada GeeksForGeeks.

Consulta:

CREATE DATABASE GeeksForGeeks

Producción:

Paso 2: use la base de datos GeeksForGeeks. Para esto, use el siguiente comando.

Consulta:

USE GeeksForGeeks

Producción:

Paso 3: Cree una tabla STUDENT_INFO dentro de la base de datos GeeksForGeeks. Esta tabla tiene 3 columnas, a saber, ROLL_NO, STUDENT_NAME y BRANCH que contienen el número de registro, el nombre y la rama de varios estudiantes.

Consulta:

CREATE TABLE STUDENT_INFO(
ROLL_NO INT PRIMARY KEY,
STUDENT_NAME VARCHAR(10),
BRANCH VARCHAR(5)
);

Producción:

Paso 4: Describa la estructura de la tabla STUDENT_INFO.

Consulta:

EXEC SP_COLUMNS STUDENT_INFO;

Producción:

Paso 5: Cree una tabla STUDENT_MARKS dentro de la base de datos GeeksForGeeks. Esta tabla tiene 3 columnas, a saber, ROLL_NO, SUBJECT y MARKS que contienen el número de lista, el tema y las calificaciones de varios estudiantes. Aquí, la columna ROLL_NO actúa como una clave externa que hace referencia a la columna ROLL_NO de la tabla STUDENT_INFO, que es la clave principal de la tabla STUDENT_INFO. 

Consulta:

CREATE TABLE STUDENT_MARKS(
ROLL_NO INT REFERENCES STUDENT_INFO(ROLL_NO),
SUNJECT VARCHAR(10),
MARKS INT
);

Producción:

Paso 6: Describa la estructura de la tabla STUDENT_MARKS.

Consulta:

EXEC SP_COLUMNS STUDENT_MARKS;

Producción:

Paso 7: inserte 5 filas en la tabla STUDENT_NFO.

Consulta:

INSERT INTO STUDENT_INFO VALUES(1,'JIM','CSE');
INSERT INTO STUDENT_INFO VALUES(2,'TIM','ELE');
INSERT INTO STUDENT_INFO VALUES(3,'PAM','ECE');

Producción:

Paso 8: Muestre todas las filas de la tabla STUDENT_INFO.

Consulta:

SELECT * FROM STUDENT_INFO;

Producción:

Paso 9: inserte 1 fila en la tabla STUDENT_MARKS. La entrada para la columna ROLL_NO aquí, es decir, 1, ya existe en la tabla base, es decir, STUDENT_INFO.

Consulta:

INSERT INTO STUDENT_MARKS VALUES(1,'CPP',100);

Nota: La inserción es exitosa ya que la anomalía de inserción/adición no se viola debido a que el número de lista 1 ya estaba presente en la tabla base STUDENT_INFO.

Producción:

Paso 10: inserte 1 fila en la tabla STUDENT_MARKS. La entrada para la columna ROLL_NO aquí, es decir, 4, no existe en la tabla base, es decir, STUDENT_INFO.

Consulta:

INSERT INTO STUDENT_MARKS VALUES(4,'DBMS',95);

Nota: La inserción no es exitosa y se genera un error de integridad referencial ya que se está violando la anomalía de inserción/adición ya que el número de lista 4 estaba ausente en la tabla base STUDENT_INFO.

Producción:

Paso 11: inserte 1 fila en la tabla STUDENT_INFO que tenga el valor ROLL_NO como 4.

Consulta:

INSERT INTO STUDENT_INFO VALUES(4,'KAREN','ME');

Producción:

Paso 12: inserte 1 fila en la tabla STUDENT_MARKS. Ahora, la entrada para la columna ROLL_NO aquí, es decir, 4 existe en la tabla base, es decir, STUDENT_INFO.

Consulta:

INSERT INTO STUDENT_MARKS VALUES(4,'DBMS',95);

Nota: La inserción es exitosa ya que la anomalía de inserción/adición no se viola ya que el número de lista 4 ahora está presente en la tabla base STUDENT_INFO.

Producción:

Paso 13: Muestre todas las filas de la tabla STUDENT_MARKS.

Consulta:

SELECT * FROM STUDENT_MARKS;

Salida :

Publicación traducida automáticamente

Artículo escrito por abhisri459 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *