Las tablas se relacionan con otras tablas mediante una relación de clave primaria o de clave foránea. Las relaciones de claves primarias y foráneas se utilizan en las bases de datos relacionales para definir relaciones de muchos a uno entre tablas.

Las relaciones de claves primarias y foráneas entre tablas en un esquema de estrella o copo de nieve, a veces llamadas relaciones de muchos a uno, representan las vías de acceso a través de las cuales las tablas relacionadas se unen en la base de datos. Estas vías de acceso de unión son la base para formar consultas de datos históricos. Para obtener más información sobre las relaciones de muchos a uno, consulte Relaciones de muchos a uno.

Relaciones de muchos a uno

Una relación de muchos a uno hace referencia a una tabla o entidad que contiene valores y hace referencia a otra tabla o entidad que tiene valores exclusivos. Las relaciones de muchos a uno con frecuencia son impuestas por las relaciones de clave foránea y clave primaria, y generalmente las relaciones se establecen entre las tablas de hechos y las entidades o tablas de dimensiones y entre los niveles de una jerarquía.

La relación se utiliza con frecuencia para describir clasificaciones o agrupaciones. Por ejemplo, en un esquema geográfico que tenga las tablas Región, Estado y Ciudad muchos estados pertenecen a una región determinada, pero los mismos estados no pueden pertenecer a dos regiones diferentes. Lo mismo ocurre con las ciudades, una ciudad sólo está en un estado (las ciudades que tienen el mismo nombre pero están en más de un estado se deben tratar de forma algo distinta). Cada ciudad existe en un solo estado, pero un estado puede tener muchas ciudades, de ahí el término muchos a uno.

Los distintos elementos, o niveles, de una jerarquía deben tener relaciones de muchos a uno entre los niveles hijo y padre, independientemente de si la jerarquía se representa físicamente en un esquema de estrella, de copo de nieve o de constelación. Los datos deben cumplir con estas relaciones. Los datos limpios que son necesarios para aplicar las relaciones de muchos a uno son una característica importante de un esquema dimensional. Además, estas relaciones posibilitan la creación de cubos a partir de los datos relacionales.

Al definir un modelo dimensional, las relaciones de muchos a uno que definen la jerarquía se convierten en niveles de una dimensión.

Llave Primaria

Una clave primaria es una columna o un conjunto de columnas en una tabla cuyos valores identifican de forma exclusiva una fila de la tabla. Una base de datos relacional está diseñada para imponer la exclusividad de las claves primarias permitiendo que haya sólo una fila con un valor de clave primaria específico en una tabla.

Es una columna o un conjunto de columnas en una tabla cuyos valores identifican de forma exclusiva una fila de la tabla.

Campo con atributo Identity
  • Un campo numérico puede tener un atributo extra "identity". Los valores de un campo con este atributo generan valores secuenciales que se inician en 1 y se incrementan en 1 automáticamente.
  • Se utiliza generalmente en campos correspondientes a códigos de identificación para generar valores únicos para cada nuevo registro que se inserta.
  • Sólo puede haber un campo "identity" por tabla.
  • Para que un campo pueda establecerse como "identity", éste debe ser entero (también puede ser de un subtipo de entero o decimal con escala 0).
  • Cuando un campo tiene el atributo "identity" no se puede ingresar valor para él, porque se inserta automáticamente tomando el último valor como referencia, o 1 si es el primero.
  • "identity" permite indicar el valor de inicio de la secuencia y el incremento, pero lo veremos posteriormente.
  • Un campo definido como "identity" generalmente se establece como clave primaria.
  • Un campo "identity" no es editable, es decir, no se puede ingresar un valor ni actualizarlo.
  • Los valores secuenciales de un campo "identity" se generan tomando como referencia el último valor ingresado; si se elimina el último registro ingresado (por ejemplo 3) y luego se inserta otro registro, SQL Server seguirá la secuencia, es decir, colocará el valor "4".
  • El atributo "identity" permite indicar el valor de inicio de la secuencia y el incremento, para ello usamos la siguiente sintaxis:
CREATE TABLE libros(
	codigo int identity(100,2),
	titulo varchar(20),
	autor varchar(30),
	precio float
);
  • Los valores comenzarán en "100" y se incrementarán de 2 en 2; es decir, el primer registro ingresado tendrá el valor "100", los siguientes "102", "104", "106", etc.

Llave Foránea

Una clave foránea es una columna o un conjunto de columnas en una tabla cuyos valores corresponden a los valores de la clave primaria de otra tabla. Para poder añadir una fila con un valor de clave foránea específico, debe existir una fila en la tabla relacionada con el mismo valor de clave primaria.

  • Es una columna o varias columnas, que sirven para señalar cual es la llave primaria de otra tabla.
  • La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la llave primaria PRIMARY KEY de la otra tabla.

Creación de una clave principal en una tabla existente

ALTER TABLE Production.TransactionHistoryArchive 
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID 
PRIMARY KEY CLUSTERED (TransactionID);

Creación de una clave principal en una tabla nueva

CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int IDENTITY (1,1) NOT NULL, CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID));

Creación de una clave principal con un índice agrupado en una tabla nueva

-- Crear tabla para agregar el índice agrupado
CREATE TABLE Production.TransactionHistoryArchive1 ( CustomerID uniqueidentifier DEFAULT NEWSEQUENTIALID() , TransactionID int IDENTITY (1,1) NOT NULL , CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID) ) ;

-- Ahora agregue el índice agrupado
CREATE CLUSTERED INDEX CIX_TransactionID ON Production.TransactionHistoryArchive1 (TransactionID );

Primary key (w3schools)

CREATE TABLE Persons ( ID int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int );

Foreign Key

CREATE TABLE Sales.TempSalesReason ( TempID int NOT NULL, Name nvarchar(50) , CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID) , CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE ) ;

Crear una clave externa de una tabla existente

ALTER TABLE Sales.TempSalesReason ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE;

Foreign key (w3schools)

CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, OrderNumber int NOT NULL, PersonID int FOREIGN KEY REFERENCES Persons(PersonID) );

ALTER Table (w3schools)

ALTER TABLE Orders ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

ALTER Table (w3schools)

ALTER TABLE Orders ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Drop Key (w3schools)

ALTER TABLE Orders DROP CONSTRAINT FK_PersonOrder;
Built with LogoFlowershow