Pergunta

I foram à procura de uma solução de banco de dados para permitir que os campos definidos pelo usuário e valores (permitindo um número ilimitado). À primeira vista, EAV parecia ser o ajuste certo, mas depois de algum lendo eu não tenho certeza mais.

Quais são os prós e contras de EAV?

Existe um método de banco de dados alternativo para permitir que usuário definidos atributos / campos e valores?

Foi útil?

Solução

Isto não é para ser considerado uma resposta exaustiva, mas apenas alguns pontos sobre o tema.

Uma vez que a questão também é marcada com a tag [sql], deixe-me dizer que, em geral, relacional bancos de dados não são particularmente adequados para o armazenamento de dados usando o href="http://en.wikipedia.org/wiki/Entity-attribute-value_model" rel="noreferrer"> EAV modelo

Se você realmente necessitam de um design sem esquema, "permitindo um número ilimitado de atributos", sua melhor aposta é provavelmente usar um solução NoSQL . Mesmo que as fraquezas da EAV em relação a bancos de dados relacionais também se aplicam às alternativas NoSQL, você será oferecido recursos adicionais que são difíceis de alcançar com bancos de dados SQL convencionais. Por exemplo, geralmente armazenamentos de dados NoSQL pode ser escalado muito mais fácil do que bancos de dados relacionais, simplesmente porque eles foram projetados para resolver algum tipo de problema de escalabilidade, e eles intencionalmente caiu características que fazem escala difícil.

Muitas plataformas de Cloud Computing (como os oferecidos por Amazon , Google e Microsoft ) estão apresentando armazenamentos de dados com base no modelo EAV, onde um número arbitrário de atributos podem ser associados a uma determinada entidade. Se você está considerando a implantação de seu aplicativo para a nuvem, você pode considerar isso tanto como uma vantagem comercial, bem como um técnico, porque a forte concorrência entre os grandes fornecedores está empurrando as proporções valor-custo para níveis muito elevados, continuamente empurrando para cima sobre as características e empurrando para baixo os custos financeiros e de implementação.

Outras dicas

Tenha um olhar em posgtres hstore http://www.postgresql.org/ docs / 9,0 / estática / hstore.html isso vai fazer exatamente o que você quer sem a maioria das desvantagens

O Streams Platform propõe o caminho alternativo baseado em Streams ( na verdade, é o modelo de domínio ), Campos e Atribuições entidades.

Existe um método de banco de dados alternativo para permitir que usuário definidos atributos / campos e valores?

Uma alternativa é mudar o esquema de banco de dados com base na entrada do usuário:. Por exemplo, quando o usuário quer um novo campo, em seguida, adicione uma coluna correspondente ao banco de dados

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