Tengo 4 subclases: Video
, Image
, Note
y Form
. Cada uno contiene diferentes tipos de datos. Por ejemplo, la clase Image
contiene una ruta al archivo de imagen en el disco y las propiedades de la imagen, y la clase Form
contiene los valores del campo de formulario. El elemento común entre cada elemento, sin embargo, es las coordenadas GPS y sentido, por lo que tienen la siguiente clase base abstracta:modelar una clase base y subclases abstractas en una base de datos
public abstract class Content
{
public float? Latitude { get; set; }
public float? Longitude { get; set; }
public float? Heading { get; set; }
}
Sin embargo, donde consigo nebulosa está en la forma de modelar esto en una base de datos. Actualmente tengo una tabla llamada Events
(para el ejemplo, digamos que un evento es una fiesta de cumpleaños) y 4 tablas (Videos
, Images
, Notes
y Forms
). Cada tabla tiene una clave externa que enlaza a la clave principal Events
'.
Usando LINQ-to-SQL, obtengo 5 clases para cada tabla. Esto está bien si solo quiero un tipo de datos, por ejemplo Event.Images
, pero lo que quiero hacer es contar el número total de 'contenidos' que tiene Event
y obtener las coordenadas GPS. Puedo aumentar el conteo de manera fácil simplemente usando Event.Images.Count() + Event.Videos.Count() + ...
, pero no puedo hacer lo mismo con las coordenadas GPS. ¿Hay alguna manera de que pueda modelar la base de datos para que pueda usar una clase base para cada elemento y aún así poder obtener el elemento fuertemente tipado cuando necesito ver sus datos?
Gracias por los enlaces. No proporcionan exactamente una buena descripción sobre cómo usar los modelos, pero me da un punto de partida para investigar más. Personalmente, siempre he pensado que el modelo de tabla única era una mala idea porque significa que si agrega una nueva subclase, tendrá que agregar nuevas columnas para sus datos, y eso puede aumentar a un tamaño no deseado, aunque para aplicaciones más pequeñas puedo ver los méritos de usarlo. –
Ya, hay compensaciones definidas. Solo depende de la probabilidad de agregar nuevos tipos. Si no es probable, puede ser mejor evitar atravesar varias tablas y usar la tabla única. Si es posible, uno de los otros patrones. Y, sí, esos enlaces son bastante escasos porque quieren que compres el libro :-) Es un buen libro, vale la pena, creo. – SingleShot