Então, estou prestes a escrever um aplicativo da Web bastante simples, atualmente estou trabalhando ativamente no esquema do banco de dados e preciso de ajuda para evitar grandes inconvenientes. Eu programo (php) há alguns anos, mas nunca tive nenhuma formação teórica, então sou totalmente ignorante sobre as melhores práticas de banco de dados e gostaria muito de aprender mais.
O problema é o seguinte: o aplicativo vai ser um CMS bem básico que permite armazenar postagens de blogs, eventos, galerias de fotos e outros itens diversos. Agora todos esses itens compartilham os mesmos atributos (mais ou menos, mas digamos que sim) que são user_id
, title
, date
, content
. Além disso, todos eles podem ser "comentados", "favoritos", "compartilhados" etc. E, finalmente, podem ser vinculados entre si (um post de blog pode se referir a um evento, que tenha fotos, etc.). Por causa disso, fico tentado a criar apenas uma tabela chamada "itens" e ter um campo "tipo" para diferenciar os itens. A consequência seria ter apenas uma tabela "join" para cada ação: "users_comments", "users_favorites", etc. e uma tabela de junção para conexões de itens entre si. Em última análise, pode haver mais tipos de itens no futuro...
Eu meio que sinto que esse é um caminho ruim e preguiçoso, principalmente por causa do desempenho, mas eu realmente gostaria de ter sua opinião sobre isso. O efeito de bloqueio tornará o site totalmente inútil, pois várias pessoas tentarão ler e escrever esses "itens"? Por que vale a pena, estou usando MySQL com MyIsam e CakePHP.
Além dessa questão está o fato de não estar acostumado com aplicações de grande escala e sempre me questionar sobre o desempenho. Acabei de ler sobre 3NF e vou continuar aprendendo essas coisas, então qualquer dica de leitura seria muito apreciada.