Pergunta

Eu tenho uma situação incomum para modelo em um banco de dados MS SQL Server: a chave primária de uma tabela é um multi-segmento-chave 'natural' composto por 5 chaves estrangeiras (de tamanhos fixos)

.

gostaria de ser capaz de definir um tipo de dados definidos pelo utilizador para aplicar a estrutura de dados baseado em um CHAR (8) primitiva de tal maneira que os elementos são endereçáveis ??como campos individuais.

Por exemplo (em mau 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

e, em seguida, ser capaz de fazer coisas 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')

Até agora tudo que eu encontrei é este CodeProject artigo que faz não vai suficientemente longe ou fornecer links para mais informações, e isso rudimentar MSDN ligação .

Aparentemente o meu google-fu é fraco esta noite, quaisquer links / sugestões muito apreciada!

Título alternativo: como simular 'sobreposição' campos no servidor SQL

MS SQL Server 2005 ou posterior assumido / preferido.

Foi útil?

Solução

Você pode definir um UDT CLR que tem a estrutura que você quer, mas (1) você não será capaz de manter as chaves estrangeiras (chaves estrangeiras tem que ser no nível da coluna, não um campo de uma UDT em um coluna), e (2) não é trivial para implementar um CLR UDT (pelo menos em comparação com o que está na sua pseudocódigo). Além disso, a partir de sua descrição, parece que eles realmente são colunas separadas semanticamente, e o que você está procurando é apenas um atalho para conveniência; IMO a UDT provavelmente não é a melhor abordagem nesse cenário de qualquer maneira.

Eu sugeriria manter as colunas separadas, mas quer criar uma visão que tem uma coluna que concatena os campos juntos, ou uma coluna computada na tabela que faz o mesmo. Isto irá permitir pesquisar usando a notação combinada ou separada. Pode então utilizar um VEZ DE gatilho para decompor uma inserção / actualização na coluna combinadas para as partes componentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top