필자는 외래 키 관계로 인해 분명히 서로 의존하는 관계형 데이터베이스에 많은 테이블을 가지고 있습니다. 종속성 트리를 만들고 트래버스하고 INSERT SQL 문을 출력하려고합니다. 부모 테이블은 외래 키 식별자 테이블의 값에 의존하기 때문에 먼저 내 종속성 트리의 외래 키 테이블에 대해 SQL을 출력해야합니다.종속성을 추적하려면 어떤 데이터 구조를 사용해야합니까?
포스트 오더에서 트래버스 한 이진 트리가이 작업에 적합합니까?
필자는 외래 키 관계로 인해 분명히 서로 의존하는 관계형 데이터베이스에 많은 테이블을 가지고 있습니다. 종속성 트리를 만들고 트래버스하고 INSERT SQL 문을 출력하려고합니다. 부모 테이블은 외래 키 식별자 테이블의 값에 의존하기 때문에 먼저 내 종속성 트리의 외래 키 테이블에 대해 SQL을 출력해야합니다.종속성을 추적하려면 어떤 데이터 구조를 사용해야합니까?
포스트 오더에서 트래버스 한 이진 트리가이 작업에 적합합니까?
테이블이 두 개 이상의 테이블에 종속 될 수 있으면 이진 트리가 충분하지 않습니다. 테이블 A가 테이블 B, C 및 D에 종속되도록하십시오. 그러면 B, C 및 D에 먼저 삽입해야합니다. 즉, A는 트리에 세 개의 자식 노드가 있어야합니다.
임의의 수의 자식 노드를 허용하는보다 일반적인 트리 구조를 사용해야한다고 생각합니다. 포스트 트리 구조에서이 트리 구조를 탐색하면 제안한대로 원하는 결과를 얻을 수 있습니다.
Microsoft.SqlServer.Management.Smo.Server
:
는 다음에 봐)
상황이 당신의 의존성 그래프가 사이클을 포함하는 경우 혼란스러워하기 시작합니다 그리고 당신은 제약 조건 확인을 연기 할 필요가 Microsoft.SqlServer.Management.Smo.Database
Microsoft.SqlServer.Management.Smo.Scripter
Microsoft.SqlServer.Management.Smo.DependencyTree, Microsoft.SqlServer.Management.Smo.DependencyWalker
Microsoft.SqlServer.Management.Smo.DependencyCollection 모든이를 사용하는 방법에 대한 MSDN의 예제가있다
Microsoft.SqlServer.Management.Smo.DependencyCollectionNode.
은 기본적으로 당신은 n 차 나무에
Server server = new Server(SOURCESERVER);
Database database = server.Databases[SOURCEDATABASE];
Scripter sp = new Scripter(server);
...
UrnCollection col = new UrnCollection();
foreach (Table table in database.Tables)
{
col.Add(table.Urn);
}
....
DependencyTree tree = sp.DiscoverDependencies(col, DependencyType.Parents);
DependencyWalker walker = new DependencyWalker(server);
DependencyCollection depends = walker.WalkDependencies(tree);
//Iterate over each table in DB in dependent order...
foreach (DependencyCollectionNode dcn in depends)
...
아, 멋지다. 너무 나쁘다. PHP를 사용하고 있고 데이터베이스에 외래 키 제약이 없다. 나는 재귀 적 방법을 사용하여 끝냈다. –
좋은 캐치 같은 것을 원한다. –