Talvez o título seja enganoso, mas tentarei explicar o que estou tentando fazer.
Estou construindo um site de comércio eletrônico. Tenho meus produtos e meu pedido. Quero adicionar restrições de como o pedido será entregue ao cliente dependendo de cada produto.
Por exemplo, se eu vender um produto grande e frágil, quero restringir o envio por correio, o cliente deve ter apenas a opção de retirá-lo na loja. Ou um produto específico só pode ser enviado para países limitados.
Achei que poderia criar uma tabela extra relacionada a produtos.
Dessa forma, eu poderia saber quais tipos de restrições cada produto possui. E não tenho limitação de quantos tipos extras de restrição posso fazer.
Por exemplo
restrictions(1,124,'post.courier',false)
Mas se fizer isso,
restrictions(2,1322,'country','Greece')
o campo de valor é um tipo diferente.
Meu segundo pensamento foi usar um campo de restrições do tipo TEXT e passar dentro de ambos os valores e restrições em um JSON
formato ouXML
Outro pensamento foi criar tabelas separadas para cada tipo,
e juntar todos eles, mas não parecia apropriado.
Qual seria o melhor no meu caso?
Existe uma maneira melhor de projetar meu banco de dados?
Não seria seguro assumir que seus produtos podem ter mais de uma restrição?
Nesse caso, você não precisa de uma interseção entre produto e restrição (tipo)?
Considere este ER:
Observe que as restrições são mostradas usando um modelo de subtipagem de entidade. Você pode manter tipos de valores de restrição distintos apropriados para o tipo de dados que você requer. Ao mesmo tempo, os tipos de restrição específicos individuais compartilham um espaço de chave com a tabela de cabeçalho de restrição. Isso torna a interseção:
PRODUCT_RESTRICTION
mais fácil de definir e usar.Existem diferentes maneiras de fazer isso, mas você provavelmente gostaria de considerar a inclusão de um atributo de particionamento na
RESTRICTION
tabela.Walter Mitty sugere:
Joel Brown responde:
O modelo de restrição que ilustrei é uma maneira comum de implementar a subtipagem. Existem outras variações.