주소가 가능한 멤버로 사용자 정의 데이터 유형을 정의하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/372898

문제

MS SQL Server 데이터베이스에서 모델링 할 비정상적인 상황이 있습니다. 테이블의 기본 키는 5 개의 외래 키 (고정 크기)로 구성된 다중 세그먼트 '천연'키입니다.

사용자 정의 데이터 유형을 정의하여 요소가 개별 필드로 주소되는 방식으로 char (8) 원시를 기반으로 데이터 구조를 구현할 수 있기를 원합니다.

예를 들어 (나쁜 의사 코드에서) :

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

그런 다음 다음과 같은 일을 할 수 있습니다.

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')

지금까지 내가 찾은 것은 이것입니다 Codeproject 기사 충분히 멀지 않거나 추가 정보를위한 링크를 제공하지 않으며,이 기초적인 MSDN 링크.

분명히 내 Google-Fu는 오늘 밤 약해요. 모든 링크/힌트는 대단히 감사합니다!

대체 제목 : SQL Server에서 '오버레이'필드를 시뮬레이션하는 방법은 무엇입니까?

MS SQL Server 2005 이상은 추정/선호합니다.

도움이 되었습니까?

해결책

원하는 구조가있는 CLR UDT를 정의 할 수 있지만 (1) 외래 키를 유지할 수 없습니다 (외부 키는 열의 UDT의 필드가 아닌 열 레벨에 있어야합니다), (2) CLR UDT (적어도 의사 코드에있는 것과 비교)를 구현하는 것은 사소한 일이 아닙니다. 또한 설명에서 실제로는 의미 적으로 별도의 열인 것처럼 들리며, 원하는 것은 편의를위한 바로 가기입니다. IMO A UDT는 아마도 그 시나리오에서 가장 좋은 접근법이 아닐 것입니다.

별도의 열을 유지하는 것이 좋습니다. 그러나 필드를 함께 연결하는 열이있는 뷰 또는 테이블에 계산 된 열이 동일하게 수행됩니다. 이렇게하면 결합 된 표기법 또는 별도의 표기법을 사용하여 검색 할 수 있습니다. 그런 다음 트리거 대신에 사용하여 결합 된 열의 삽입/업데이트를 구성 요소 부품으로 분해 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top