renglones multiples filas fechas example ejemplo dinamicas convertir con columnas column sql-server linq

multiples - Definición de una relación uno a uno en SQL Server



pivot text column sql server (6)

¿Por qué no hacer que la clave externa de cada mesa sea única?

Necesito definir una relación de uno a uno, y no puedo encontrar la forma correcta de hacerlo en SQL Server.

¿Por qué una relación uno a uno preguntas?

Estoy usando WCF como DAL (Linq) y tengo una tabla que contiene una columna BLOB. El BLOB casi nunca cambia y sería una pérdida de ancho de banda transferirlo cada vez que se realiza una consulta.

Eché un vistazo a esta solución , y aunque parece una gran idea, puedo ver a Linq con un pequeño ataque de nervios cuando intenta implementar este enfoque.

¿Algunas ideas?


Coloque artículos relacionados 1: 1 en la misma fila en la misma tabla. Ahí es donde viene la "relación" en "base de datos relacional": las cosas relacionadas entran en la misma fila.

Si desea reducir el tamaño de los datos que viajan por el cable, considere la posibilidad de proyectar solo las columnas necesarias:

SELECT c1, c2, c3 FROM t1

o cree una vista que solo proyecte columnas relevantes y use esa vista cuando sea necesario:

CREATE VIEW V1 AS SELECT c1, c2, c3 FROM t1 SELECT * FROM t1 UPDATE v1 SET c1=5 WHERE c2=7

Tenga en cuenta que los BLOB se almacenan fuera de la fila en SQL Server, por lo que no está ahorrando mucho IO de disco dividiendo verticalmente sus datos. Si se trata de columnas que no son BLOB, puede beneficiarse de la creación de particiones verticales tal como lo describió, ya que hará menos IO de disco para escanear la tabla base.


De uno a uno en realidad se utiliza con frecuencia en la relación de supertipo / subtipo. En la tabla secundaria, la clave principal también sirve como clave externa para la tabla padre. Aquí hay un ejemplo:

CREATE TABLE Organization ( ID int PRIMARY KEY, Name varchar(200), Address varchar(200), Phone varchar(12) ) GO CREATE TABLE Customer ( ID int PRIMARY KEY, AccountManager varchar(100) ) GO ALTER TABLE Customer ADD FOREIGN KEY (ID) REFERENCES Organization(ID) ON DELETE CASCADE ON UPDATE CASCADE GO


En mi opinión, una mejor solución para no leer el BLOB con la consulta LINQ sería crear una vista en la tabla que contenga toda la columna, excepto las de BLOB.

Luego puede crear una entidad EF basada en la vista.


Qué tal esto. Enlace la clave principal en la primera tabla a la clave primaria en la segunda tabla.

Tab1.ID (PK) <-> Tab2.ID (PK)

Mi problema es que tengo un proceso de 2 etapas con campos obligatorios en ambos. Todo el proceso podría clasificarse como un episodio (puesto en la misma tabla) pero hay una etapa inicial y una etapa final.


no existe una relación explícita uno-a-uno.

Pero, por el hecho de que tbl1.id y tbl2.id son claves primarias y tbl2.id es una clave externa que hace referencia a tbl1.id, ha creado una relación implícita 1: 0..1.