Como armazenar dados em um banco de dados sem tabelas?

12

Tudo o que aprendi na escola foi SQL, que salva dados em tabelas. No momento, estou trabalhando em um projeto em que os dados são armazenados em arquivos XML. Além disso, todo XML contém uma referência a arquivos visuais (JPEG).

O XML em si contém mais de mil pontos de coordenadas, além de informações adicionais sobre os dados.

Na minha opinião, não faria sentido armazenar essas informações em tabelas. Além disso, eu também não podia armazenar arquivos JPEG com SQL.

Qual seria a solução apropriada ou há um erro de raciocínio do meu lado?

Como você pode ver, sou bastante novo nos bancos de dados. Portanto, sugestões, links e conselhos construtivos são bem-vindos.

チ ー ズ パ
fonte
O SQL Server certamente pode armazenar arquivos JPEG usando o tipo de dados IMAGE. Eu não recomendaria isso, no entanto. Você seria melhor usando FILE-STREAM.
datagod
Quando se trata de armazenar jpeg (ou qualquer outro arquivo) no banco de dados, isso foi tratado aqui em algumas das perguntas mais frequentes. Quanto à maneira de armazenar XML e encontrar esses dados rapidamente, é para isso que servem os sistemas de armazenamento de dados de documentos. Eu procuraria uma solução NoSQL em um banco de dados relacional, será mais fácil trabalhar com isso.
jcolebrand
Quando se trata de XML, o DB2 da IBM permite que você faça isso. E você pode consultar os dados com SQL ou XPath / XQuery. Sua edição Express-C gratuita vem com a capacidade de fazer isso. Se você migrar para o Enterprise Edition, precisará pagar para ativar esse recurso.
21412 Chris Aldrich

Respostas:

11

Tudo que você precisa é persistência do seu XML. Use uma solução NoSQL ou o sistema de arquivos.

Não há benefício em usar um RDBMS, a menos que você queira usá-lo em vez do NoSQL ou do sistema de arquivos.

gbn
fonte
O que seria uma solução NoSQL apropriada? Estou trabalhando com c # em um aplicativo winform btw.
2141212
@bodycountPP: Eu não tenho experiência com eles ...
gbn
7
Gostaria de verificar RavenDB ( ravendb.net ) ou CouchBase ( couchbase.com/couchbase-server/overview ) para uso no Windows. Outros podem ser encontrados no Google - tive uma boa experiência com esses produtos. Obviamente, sua milhagem pode variar :)
ITHedgeHog
10

Marquei de Phil Fator post Normalização e 'Anima notitia copia' hoje como resume bem o caso a favor e contra normalizar certos tipos de dados. Execute a seguinte consulta em uma instância SQL e veja se você concorda.

SELECT * FROM sys.syslanguages

O SQL permite criar bancos de dados relacionais. No entanto, mesmo que cheire mal, não é crime fazer coisas terrivelmente não relacionais com um banco de dados SQL apenas pelo tempo necessário e você pode perceber a diferença; não apenas isso, mas também apenas se você estiver ciente dos riscos e implicações.

Você mencionou que o arquivo XML contém "informações adicionais sobre os dados". Existe algum benefício em modelar esses metadados em um banco de dados relacional, talvez para fins de interrogatório? Nesse caso, pode haver um caso para extrair os dados relevantes e persistir o XML restante como um tipo de documento XML.

... se você recebeu uma string JSON ou XML e é necessário armazená-la em um banco de dados, tudo o que você precisa fazer é se perguntar, em sua função como Anima notitia copia (Alma do banco de dados) 'tenho alguma interesse no conteúdo deste item de informação? '. Se a resposta for 'Não!' Ou 'nequequam! Então é um valor atômico, por mais complexo que seja.

O argumento de Phil Factor é que os campos não relacionais em um banco de dados relacional são perfeitamente aceitáveis ​​se o campo for tratado como atômico, isto é, ele não muda, ou quando o campo inteiro muda, não faz parte dele. A extensão natural disso é que, se o seu documento contiver elementos nos quais você tem interesse, pode ser útil aplicar um modelo relacional a esses elementos.

Relevante para a pergunta, mas principalmente para a fraseologia, uma última citação de Phil:

Naturalmente, nunca criei conscientemente um banco de dados que o Codd teria desaprovado, mas nas bordas existem interfaces e feeds de dados que escrevi que causaram ataques sibilantes entre os fundamentalistas da Normalização.

Não todos nós!

Mark Storey-Smith
fonte
2
ACORD é um pouco assim. Já vi pessoas tentando convencê-lo a servir como modelo de banco de dados. A ACORD posteriormente licenciou um modelo de dados da Prima, então até eles admitem que não era muito um modelo de dados. O padrão de mensagens da ACORD possui cerca de 7.000 campos definidos, dos quais cerca de 200 são obrigatórios - a melhor descrição da ACORD (de alguém fortemente envolvido nos padrões de mensagens) é que o "não sabe como gerenciar um processo de padrões".
ConcernedOfTunbridgeWells
3

No que diz respeito aos bancos de dados Oracle, a resposta é que você não pode . Todos os dados em um banco de dados são armazenados em tabelas, até meta-dados. Os dados podem ser armazenados em filas, mas essas são apenas uma maneira diferente de usar tabelas. Os arquivos XML podem ser armazenados fora de um banco de dados, mas isso não atende aos seus requisitos "no banco de dados".

Indo além da pergunta declarada, os arquivos JPEG ou quaisquer arquivos relacionados a esse assunto podem ser armazenados em um banco de dados. Eles exigiriam uma tabela e uma coluna LOB (BLOB ou CLOB). O XML também pode ser armazenado dessa maneira, mas a importação dos dados XML no banco de dados permitirá que você opere nos dados de maneiras que não podem ser facilmente executadas agora. Também forneceria outros benefícios dos bancos de dados, incluindo: Redundância Reduzida, Acessibilidade, Concorrência, Escalabilidade, Interoperabilidade, Segurança, Recuperação e Desempenho.

Se os benefícios de um banco de dados não promoverem seus objetivos, não use um.

Leigh Riffel
fonte
2

Parece-me que você está tentando implementar um banco de dados espacial . Esse é um tipo de banco de dados relacional (ou um complemento para produtos de banco de dados existentes, por exemplo, Oracle Spatial, postGIS) que suporta funções de tipos de dados espaciais e é usado para otimizar o armazenamento e consultas de dados relacionados a recursos espaciais, como limites poligonais, pontos e camadas. O XML que você possui soa como pares de coordenadas de limite e as imagens associadas parecem recursos de arte-final para exibir nesse limite. Se os dados se ajustarem, considere um banco de dados espacial relacional que ofereça modelagem espacial incorporada para fornecer funcionalidades que, de outra forma, seria difícil ou demorada para implementar.

lotes fora do tempo
fonte
Além disso, se você estiver implementando um Sistema de Informações Geográficas , considere fazer essa pergunta nos Sistemas de Informações Geográficas .