Modelo Relacional - Duvida sobre criação de uma nova tabela

Eu estou fazendo um modelo relacional de um site de e-comerce e fiquei com a seguinte duvida:
Cada tipo de produto pode ter definições diferentes. Por exemplo se eu fosse vender comida eu teria que armazenar a validade e eu não sei onde colocar esse atributo especifico de um determinado produto. Eu tenho que criar uma tabela nova que herde as informações de produto ou colocar esse atributo na tabela produto, mesmo que não sejam todos os produtos que necessitem dele?

Meu modelo relacional atualmente:

prefira trabalhar com herança, crie uma especialização da tabela produtos, tipo produto_nao_perecivel e produto_perecivel.

2 curtidas

Mas, tem algum problema em questão de desempenho eu ter umas 10 tabelas ou mais que herdem da classe produto?

Desempenho será um problema se essas tabelas forem manuseadas incorretamente. Mas usando especialização, você terá uma flexibilidade maior para trabalhar com esses dados. Por exemplo, ao apresentar os produtos de determinada categoria, você não precisará pesquisar numa tabela onde terá todos os produtos, mas sim apenas na tabela que manterá os produtos da categoria selecionada.

1 curtida

exatamente como o @Lucas_Camara falou, na verdade vais ter o mesmo número de tabelas que se fosse gerar uma tabela para produto outra para produto perecível, com a especialização você terá uma tabela “Base” no caso “Produto” e as especializações necessárias com os atributos exclusivos de cada produto como no seu caso somente uma tabela com atributo validade, ai que tá, você terá uma tabela que ocupa bem menos espaço somente com um atributo, ao invés de duas tabelas com redundância de dados. A chave primaria da tabela Base acaba sendo chave estrangeira para a tabela produto_perecível.

Vantagens além das citadas pelo colega, ainda elimina a redudância de informações.

1 curtida

Use Interfaces ao invés de herança.

Obrigado :smiley:.

Agora uma pergunta mais especifica, não sei se vocês usam Oracle, mas se usarem, para criar herança eu tenho que criar um objeto e depois criar a tabela do tipo do objeto?