Pregunta

Tengo una situación inusual para modelar en una base de datos MS SQL Server: la clave principal de una tabla es clave un multi-segmento 'natural' compuesto por 5 claves externas (de tamaños fijos)

.

Me gustaría ser capaz de definir un tipo de datos definido por el usuario para implementar la estructura de datos basada en un CHAR (8) primitivo de tal manera que los elementos son direccionables como campos individuales.

Por ejemplo (en mal pseudocódigo):

UDT seggy
(
    seg1 char(2),
    seg2 char(1),
    seg3 char(1),
    seg4 char(2),
    seg5 char(2)
)

create table yotable
(
    pkfield seggy NOT NULL,
    etc varchar(14),   --whatever etc.
)
with pkfield as the primary key,
and also with seg1 as a foreign key to tableseg1,
and also with seg2 as a foreign key to tableseg2,
and so on

y luego ser capaz de hacer cosas como esta:

insert into yotable (pkfield, etc) values ('abcdefgh','whatever')
select * from yotable where seg2 = 'c'
insert into yotable (seg1,seg2,seg3,seg4,seg5,etc)
    values ('ab','c','d','ef','gh', 'whatever')

Hasta ahora todo lo que he encontrado es esta CodeProject artículo la que hace no va lo suficientemente lejos o proporcionar enlaces para ampliar la información, y esto rudimentaria MSDN enlace .

Al parecer, mi google-fu es débil esta noche, cualquier enlace / consejos muy apreciados!

Título alternativo:? Cómo simular 'superposición' campos en SQL SERVER

MS SQL Server 2005 o posterior asumido / preferido.

¿Fue útil?

Solución

Se puede definir un UDT CLR que tiene la estructura que desea, pero (1) usted no será capaz de mantener las claves externas (las claves externas tienen que ser a nivel de columna, no un campo en un UDT en una columna), y (2) no es trivial para implementar un UDT CLR (al menos en comparación con lo que está en su pseudocódigo). Además, a partir de su descripción, suena como lo que realmente son semánticamente columnas separadas, y lo que estás buscando es sólo un atajo por conveniencia; OMI un UDT probablemente no es el mejor enfoque en ese escenario de todos modos.

Yo sugeriría mantener las columnas separadas, sino que crean o bien una visión que tiene una columna que concatena los campos juntos, o una columna calculada en la tabla que hace lo mismo. Esto permitirá buscar utilizando la notación combinada o separada. A continuación, puede utilizar un LUGAR DE gatillo para descomponer una inserción / actualización de la columna combinado en las partes componentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top