문제

폴더를 나타내는 객체가 있으며 데이터베이스에 표시되어야하는지 궁금합니다.

한편으로 가장 쉬운 방법은 폴더 개체를 나타내지 않고 폴더에 포함 된 객체의 경로 값을 저장하는 것 같습니다. 내가 여기서 볼 수있는 문제는 자손에 어떤 항목이 포함되어 있지 않은 폴더를 지속 할 수 없다는 것입니다. 또한 폴더 계층 구조를로드하여 모든 것을 메모리에 선불로로드하지 않고 표시에 표시하는 방법에 대한 명확한 아이디어는 없습니다. 아마도 성능 문제 일 것입니다.

대안은 부모 폴더에 대한 참조가있는 "폴더"테이블을 갖는 것입니다. 이것은 효과가있는 것처럼 보이지만 부모를 공유하지 않는 한 동일한 이름의 폴더를 허용하는 방법은 확실하지 않습니다. 그것이 DB가 자신과 관련이 있어야하는 것이되어야합니까, 아니면 비즈니스 논리에서 단지 시행 해야하는 것입니까?

도움이 되었습니까?

해결책

아이디어는 이와 같은 것입니다 (자기 참조) :

CREATE TABLE FileSystemObject ( 
    ID int not null primary key identity,
    Name varchar(100) not null,
    ParentID int null references FileSystemObject(ID),
    constraint uk_Path UNIQUE (Name, ParentID),
    IsFolder bit not null
)

다른 팁

이 중간에있는 ERD를 살펴보십시오. 페이지. 계층 구조를 별도의 테이블로 고려하면 여러 분류를 지원할 수 있습니다.

먼저 데이터베이스에 계층 구조를 유지하는 목적과 그 기능을 얻는 기능이 무엇인지 스스로에게 물어보십시오. 그런 다음 작업과 유지 보수를 고려하십시오.

트리 컨트롤을 채우기 위해 간단히 사용하는 경우 폴더 시스템에 직접 연결되는 내장 컨트롤이 있습니다. 그것이 당신에게 더 잘 작동할까요? 데이터베이스에 저장하여 그 이상으로 무언가를 얻습니까? 데이터베이스를 실제 폴더 시스템과 동기화하여 DB 외부에서 변경할 수있는 방법은 무엇입니까? 가상 파일 시스템을 제공하지 않는 한 데이터베이스에 저장된 관련 경로를 사용하여 실제 일에 직접 반대하는 것이 좋습니다.

SQL Server에는 a가 있습니다 hierarchyid 계층 구조를 지원하는 데이터 유형. 정식 버전에서만 작동합니다.

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