2011-08-28 3 views
0

나는 다음과 같은 필드가있는 고객의 매장 주소로 'AddressDemo'라는 이름의 테이블이 계층 구조가 에 가깝다 인 존재사용은 고객의 주소를 저장하는 HIERARCHYID

CREATE TABLE [dbo].[AddressDemo](
[AddressID] [int] IDENTITY(1,1) NOT NULL, 
[State] [nvarchar](50) NULL, 
[District] [nvarchar](50) NULL, 
[Taluk] [nvarchar](50) NULL, 
[Village] [nvarchar](50) NULL, 
[Street1] [nvarchar](50) NULL, 
[Street2] [nvarchar](50) NULL, 
[Phone] [nvarchar](50) NULL, 
[Mobile] [nvarchar](50) NULL, 
[Email] [nvarchar](50) NULL, 
CONSTRAINT [PK_AddressDemo] PRIMARY KEY CLUSTERED 
(
    [AddressID] ASC 
)) 

이 주 -> 구 -> 탈곡 -> 마을 -> Street1 -> Street2

데이터. 어떻게 그래서 'AddressDemo'는 AddressDemo 참조의

CREATE TABLE [dbo].[AddressDemo](
[AddressID] [int] IDENTITY(1,1) NOT NULL, 
[LocationID] [int] NULL, 
[Phone] [nvarchar](50) NULL, 
[Mobile] [nvarchar](50) NULL, 
[Email] [nvarchar](50) NULL, 
CONSTRAINT [PK_AddressDemo] PRIMARY KEY CLUSTERED 
(
    [AddressID] ASC 
)) 

LocationID을 다음 LocationDemo의 LocationID에 모양을

CREATE TABLE [dbo].[LocationDemo](
[LocationID] [int] IDENTITY(1,1) NOT NULL, 
[LocationNodeID] [hierarchyid] NULL, 
[Location] [nvarchar](50) NULL, 
CONSTRAINT [PK_LocationDemo] PRIMARY KEY CLUSTERED 
(
    [LocationID] ASC 
)) 

을 따르고있다.

답변

1

제안 된 솔루션이 설명한 평탄 솔루션보다 동적이지만이 경우 위치에 대해 완전히 동적 인 스키마는 사용하지 않을 것입니다. 계층 적 처리를 추가하면 이 아닌 데이터베이스 조회를 나중에 복잡하게하고 성능 최적화 대안을 제한하기 때문에 (CTE를 포함하는보기를 색인 할 수 없으며 응용 프로그램에서 합리적으로이 데이터를 소비해야하는보기가 필요하기 때문에) .

저용량 시스템이나 저장되는 주소 수가 적은 경우 동적 주소 요소 경로로 재생할 수 있지만 대다수없이 논리적으로 아무 주소도 존재하지 않는다는 사실을 고려할 때 위치 요소 중에서 나는 그것이 과잉이라고 다시 말할 것이다.

선외로 이동하지 않고 더 정규화 된 경로로 이동하십시오. 주소 테이블, 지구 테이블 및 FK 등에서 해당 테이블에 대한 상태 테이블 및 FK를 만드는 것을 고려하십시오.

+0

관계형 데이터베이스 스키마 정규화 (복수형 테이블 생성)를 피하고 싶습니다 – Rauf

+0

적절한 수준으로 결코 스타일을 벗어나지 않는다. – Tahbaza