Qual é a relevância de se fazer uma análise dos modelos conceitual, relacional e do modelo de implementação na criação de um novo SGBD para uma empresa? Qual relação existe entre todo esse processo e os custos de transação incorridos nas empresas?
Rodrigo
Vamos começar fazendo, em poucas palavras, algumas considerações "primitivas". O que é modelagem? Podemos dizer que é o processo de construção de um modelo. E o que é modelo? Digamos que é uma tentativa de retratar, de maneira organizada e inteligível, uma determinada realidade observada.
Vamos lá: digamos que você é o feliz possuidor de vários parafusos que vão ser usados na construção de uma ponte. Você acha que no futuro vai precisar de outros parafusos iguais para usar na construção de outra(s) ponte(s). E você (inteligente e sagaz como poucos) desconfia que desmontar a primeira ponte para verificar os atributos de cada parafuso, a cada vez que precise encomendar um outro, é procedimento bem pouco prático. Belo problema, hein?
Como preservar a informação sobre os parafusos adequados, mantendo-a disponível e facilmente acessível, sem incorrer nos exorbitantes custos de desmontagem de uma ponte?
Muito bem! Ao fazer a pergunta na frase anterior, seu cérebro entrou no que poderíamos chamar de modo conceitual: você está procurando identificar quais atributos informacionais são relevantes para particularizar um parafuso.
Você saca da algibeira seu bloquinho e caneta, e começa a anotar: Diâmetro da cabeça? A cabeça é circular ou sextavada? Qual o tamanho da haste? Quantas estrias ("roscas") existem por milímetro de haste? Qual o ângulo de inclinação da estria? Etc, etc.
E começam a aparecer as primeiras idéias sobre como preservar estas informações: Você pode manter "arquivado" um exemplar de cada parafuso. Opa! Mas isso implica em carregar um custo de "estoque" que você não tem dinheiro para bancar. Então, é uma solução, mas não uma boa solução! Mas se eu fizer uma réplica em gesso de cada parafuso o custo vai ser bem menor! É, e na primeira chuva minha informação "derrete"... não bom. Ora, eu posso criar uma lista com os atributos que já anotei, para cada parafuso, e guardá-la numa pasta. Humm! Parece uma boa solução! Você pensa mais um pouco, e lembra: "Ah! Mas nesse caso, o peso do parafuso é importante! E o material de que ele é feito também!". E anota isso no bloquinho. "Epa! A quantidade de cada parafuso, também". E ... lá vai bloquinho.
E aí, num daqueles momentos sublimes de iluminação, você faz a grande "sacada": "Putz! Se ao invés de uma lista de papel, eu fizer uma lista no computador eu vou ter um banco de dados informatizado". (Agora, todos juntos: "Oooohhhhhhhhh!!!!!").
Note que até agora só o que você gastou foi um pouquinho de seu privilegiado cérebro, tinta de caneta e umas folhas de papel.
Os procedimentos acima podem ser generalizados para uma miríade de situações e informações que pululam naquilo que chamamos de mundo real. E o que você estava fazendo era procurar descrever conceitualmente coisas que você observou na realidade. Você estava desenhando um modelo conceitual. Vantagens e relevância de começar por aí? Ora, se você tivesse ficado com a primeira idéia, teria possivelmente falido. Com a segunda idéia, mesmo sem chuva, você poderia ter especificado uma réplica sem estrias (e portanto sem valor para uso futuro), além de "perder" a informação sobre peso e material. Não apenas isso: você tem uma representação mais "próxima" da realidade retratada, ainda não mascarada pelas regras e ditames impostas por processos e ferramentas que sejam utilizados para traduzir esta representação em estruturas manuseáveis por um computador. Em outras palavras, se alguma coisa der errado, fica mais fácil descobrir se o erro está na maneira de capturar a informação ou se na maneira de traduzi-la.
É sempre útil identificar a informação disponível, quanto dela se quer preservar, quais atributos a singularizam, e assim por diante, antes de definir e se comprometer com um próximo passo: qual tipo de processo vou utilizar para tratar as informações identificadas, tipificadas e estratificadas na fase conceitual?
Qual modelo arquetípico é mais útil para armazenar, recuperar, manipular e reportar os dados (informações e seus atributos) que identifiquei e categorizei em meu modelo conceitual? Um post-it de lembrete grudado na minha xícara de café? Hierárquico? Relacional? Matrizes relacionais?
Nesta segunda fase, optando pela adoção do modelo relacional, você vai obedecer os fundamentos traçados em seu modelo conceitual (as informações que você julgou relevantes e suficientes para representar um parafuso), e transcrevê-lo em termos de tabelas, índices e chaves, conexões entre as tabelas (os relacionamentos), sua cardinalidade (1:1, 1:N, N:N), etc. Esta fase tem sido tratada com bastante clareza em nossas aulas de TI, e por isso não vou me estender em outras considerações.
Daí partimos para a terceira fase, que acaba sendo melhor identificada se a chamarmos de implementação do modelo (no caso, relacional) ao invés de modelo de implementação. É onde você vai "traduzir" as especificações traçadas na sua modelagem relacional adaptando-as às idiossincrasias de uma determinada ferramenta (um SGBD "comercial").
Por exemplo, se nas especificações de seu modelo relacional surgiram muitas instâncias de relacionamento N:N, e sua ferramenta de escolha for o Access, tenha certeza de que vais ter uma trabalheira insana para implementar estes relacionamentos. Também no caso do Access, se suas especificações contemplam acesso multi-usuário e transaction roll-back (peça explicação para a professora, caso queira) a implementação pode facilmente se transformar num pesadelo gótico! Felizmente existem outras ferramentas (Oracle, MS-SQL Server, Adabas ...) que permitem, nesses casos, uma implementação menos dolorosa.
Quanto aos custos de transação, vamos lá. Lembrando da Teoria da Firma, todos nós somos elos interconectados numa grande teia de contratos explícitos e implícitos. A efetivação dos contratos que respaldam estas interligações está fundada no intercâmbio de informações entre dois elos quaisquer. Cada transação entre dois elos embute troca de informações, e isto não é geralmente gratuito, ou melhor, nunca é gratuito para ambos os elos envolvidos. Um paga tudo e o outro não paga nada, um paga mais que o outro, ambos pagam igualmente, mas alguém sempre tem de arcar com o custo de obtenção, tratamento ou transmissão da informação embutida na transação. Este custo pode ser um valor monetário ou simplesmente de tempo e esforço dispendido nos trâmites da informação. Daí, mecanismos que agilizem a recuperação de informações (como os SGBD) tem um impacto redutor sobre os custos de transação, ao diminuir, por exemplo, o tempo de busca pelas mesmas. Por outro lado, este mesmo mecanismo pode "complicar" a obtenção da informação (intencionalmente ou não) tornando tais custos maiores. Reportando-nos a um parágrafo anterior, lembra que na fase conceitual você só havia "gastado" tempo, cérebro, tinta e papel? Esta é uma pista de como custos de transação podem ser impactados (palavrinha da moda essa, hein?): uma correção durante a fase conceitual usará um pouco mais dos insumos mencionados. Mas durante a implementação, por exemplo, pode envolver uma troca de ferramenta ao custo de alguns milhares de reais. Ou seja, os infalíveis podem se dar ao luxo de dispensar a modelagem conceitual sem se preocupar com possíveis impactos nos custos de transação. Aqueles que, como eu, são obrigados a carregar o fardo da fabilidade de nossa humana existência, precisam abordar a grande teia de transações com perspectiva calcada em obrigatória humildade, decorrente de uma limitada racionalidade.
Agora, algumas considerações práticas: a modelagem de um banco de dados não é coisa simples, podendo atingir facilmente graus de complexidade muito além do que supõe nossa vã filosofia. Um contador que se aventurar sozinho na área da modelagem de grandes e extensos bancos de dados corre o risco de se "afogar em números". É um trabalho que requer idealmente um bom e afinado time de profissionais qualificados (analistas, engenheiros de software, contadores, advogados, médicos, etc), cada qual contribuindo com o melhor de sua expertise para que se atinja um bom resultado final. Nosso maior percalço acaba sendo a aceitação pelos demais componentes do time: engenheiros de software abominam a participação de contadores na fase conceitual ("esses caras não sabem o que querem"); contadores acham os engenheiros muito complicados ("que mané relacionamento coisa nenhuma, eu quero é a receita lançada A-U-T-O-M-A-T-I-C-A-M-E-N-T-E na DRE"); advogados entram em pânico com ambos ("pelamordeDeus, assim nós vamos acabar todos na cadeia"); médicos vão adorar dizer para o contador "mas, meu caro, afinal quanto vale uma vida", e assim por diante. Por isso nunca é demais ressaltar que a modelagem de um grande banco de dados é um processo eminentemente cooperativo (e não puramente competitivo) e interativo. Não cabe exigir de cada membro do time conhecimento completo sobre todas as áreas, mas sim um mínimo de conhecimento capaz de levar a uma comunicação através de eficiente linguagem comum a todos. Cabe-nos como contadores deixar queimar na fogueira das vaidades nossos conceitos do ativo, passivo e patrimônio líquido, em prol de um balanço final lucrativo e uma demonstração de resultados positiva. Cândido Mariano da Silva Rondon, marechal, desbravador, indianista e, na minha opinião, uma das mais espetaculares figuras que a história de nosso país conheceu, costumava repetir uma frase sobre o contacto com indígenas: "Morrer se preciso for, matar nunca". Uma adaptação a ser usada como rule-of-thumb para bancos de dados poderia ser: "Informação imperfeita ou incompleta se preciso for, informação falsa nunca".
E para finalizar, recomendo aos que quiserem se aprofundar no tema, o recurso ao livro "Introdução a Sistemas de Bancos de Dados" de C.J. Date (um alerta: o Date tem uma alma profundamente relacional), ou a qualquer outro que misture no título as palavras "introdução" e "bancos de dados", onde vocês poderão encontrar esclarecimentos sobre como utilizar modelagem entidade-relacionamento, abstração e independência de dados, normalização de dados, e muitos outros tópicos interessantes.
Inté...