Como faço para criar um (tipo, id) (também conhecido como 'polimórfico')- coluna de chave estrangeira no acesso ao MS?

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

Pergunta

Em Ruby-on-Rails, isso é chamado de "Associação Polimórfica".

Tenho vários Commentable As coisas na minha aplicação, as tabelas para cada uma estão abaixo:

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

Eu gostaria de adicionar um Comments Tabela da seguinte forma:

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

Entendo que perco a integridade referencial do banco de dados dessa maneira, mas a única outra opção é ter múltiplo Comments mesas: PostComments, PersonComments, PhotoComments, ...

E agora para a pergunta:

Como posso construir um formulário que irá fazer a pesquisa, primeiro obtendo o nome da tabela Comments.commentable_type E então o ID de Comments.commentable_id?

Foi útil?

Solução

Essa técnica é conhecida coloquialmente no mundo do SQL como 'subclassificação'. Para um exemplo trabalhado (sintaxe do servidor SQL, mas é facilmente adaptado para o Access MS), consulte Blog de David Porta..

No seu cenário, os itens de dados comuns a todos os comentários estariam na sua tabela de comentários; Qualquer coisa específica para cada tipo seria em tabelas especializadas, como fotocomamentos, etc. Observe que o FK deve ser o composto de duas colunas do ID mais o tipo, algo que geralmente é esquecido, mas é essencial para a integridade referencial aqui, por exemplo, você não Deseja algo digitado como um comentário fotográfico que aparece na tabela de conquomentos de pessoa.

Outras dicas

Eu acredito que muitas pessoas fazem meta-mesas para esse tipo de coisa. Praticamente exatamente como você descreveu.

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