¿Cómo creo una columna de clave foránea (tipo, ID) (también conocida como 'polimórfica') en MS Access?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

En Ruby-on-Rails, esto se denomina una asociación polimórfica.

Tengo varias cosas Comentables en mi aplicación, las tablas para cada una están a continuación:

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

Person
id | name | ...

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

Me gustaría agregar una tabla de Comentarios de la siguiente manera:

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

Comprendo que pierdo la integridad referencial de la base de datos de esta manera, pero la única otra opción es tener varias tablas de Comentarios : PostComments , PersonComments , PhotoComments , ...

Y ahora para la pregunta:

¿Cómo puedo crear un formulario que agrupe cómo hacer la búsqueda, primero obteniendo el nombre de la tabla de Comments.commentable_type y luego el ID de Comments.commentable_id ?

¿Fue útil?

Solución

Esta técnica se conoce coloquialmente en el mundo de SQL como 'subclasificación'. Para ver un ejemplo práctico (la sintaxis de SQL Server, pero se puede adaptar fácilmente para MS Access), consulte blog de David Porta. .

En su escenario, los elementos de datos comunes a todos los comentarios estarán en su tabla de Comentarios; cualquier cosa específica para cada tipo estaría en tablas especializadas como PhotoComments, etc. Tenga en cuenta que el FK debe ser el compuesto de dos columnas del ID más el tipo, algo que a menudo se pasa por alto pero que es esencial para la integridad referencial aquí, por ejemplo. usted no quiere que se escriba algo como un comentario de foto en la tabla de comentarios personales.

Otros consejos

Creo que muchas personas hacen meta-tablas para ese tipo de cosas. Casi exactamente como lo describiste.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top