Pergunta

Eu tenho objetos que representam pastas e eu estou querendo saber se eles devem ser representados no banco de dados.

Por um lado, parece que a maneira mais fácil seria não representam pasta objetos e apenas armazenar um valor de caminho para os objetos contidos em uma pasta. Problemas que vejo com isso é que você não pode persistir uma pasta cujos descendentes não contêm quaisquer itens, que não é muito grande de um negócio. Também não ter uma ideia clara de como carregar a hierarquia da pasta de exibição (como em um TreeView) sem carregar tudo em adiantado memória, que provavelmente seria um problema de desempenho.

A alternativa é ter uma tabela de "pasta" com referências a sua pasta pai. Isto parece como ele deve funcionar, mas não estou certo como permitir que pastas com o mesmo nome, desde que eles não compartilham um pai. Se esse mesmo ser algo que o DB deve ser preocupando-se com ou isso é algo que eu deveria apenas aplicar na lógica do negócio?

Foi útil?

Solução

A idéia é algo como isto (auto-referência):

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
)

Outras dicas

Dê uma olhada no ERD no meio deste página . Factoring fora da hierarquia em uma tabela separada permite-lhe suportar múltiplas taxonomias.

Primeiro perguntar-se qual é a finalidade de manter a hierarquia no banco de dados e qual funcionalidade você ganha por isso. Em seguida, perguntar considerar o trabalho e manutenção que vai para fazê-lo.

Se você está simplesmente usá-lo para preencher um controle de árvore, não são built-in controles que vão diretamente contra o sistema de pastas. Será que o trabalho melhor para você? Você ganha algo além disso, armazenando-o no banco de dados? Como você planeja para manter o banco de dados em sincronia com o sistema de pasta real, que pode ser alterado fora do DB? A menos que seu fornecimento de um sistema de arquivos virtual que pode ser melhor para apenas ir diretamente contra a coisa real com caminhos relevantes armazenados no banco de dados.

SQL Server tem um tipo de dados hierarchyid que tem suporte para estruturas hierárquicas. Funciona apenas na versão completa, você mente.

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