valor utiliza tipo obtener numerico enumerado enumeracion enum declarar dato como clase .net design data-structures

.net - utiliza - tipo de dato enum sql server



¿Debería usar enum o consultar una tabla en mi base de datos? (4)

Creo que depende de la frecuencia con la que su lista de tipos de publicación cambiará en el futuro y de la facilidad con la que puede enviar una actualización de su aplicación. Si la lista no cambia a menudo, o si la actualización de su aplicación en el campo es fácil, entonces una enumeración tiene sentido. Si es probable que la lista cambie con frecuencia, o si la actualización de su aplicación es particularmente difícil, mantener la lista en una tabla en la base de datos es sensato.

En mi base de datos tengo tablas que definen tipos, por ejemplo

Tabla: Tipos de publicación

ID | Type ---------- 1 | Article 2 | Abstract 3 | Book ....

Que se relaciona a través de la clave ID con una tabla de publicaciones que tiene el campo TypeID .

Luego creo una tabla de datos de PublicationTable mi aplicación .NET que deseo filtrar en función del tipo de publicación. Por ejemplo, la siguiente función me da la cantidad de publicaciones para un autor específico y tipo de publicación.

Public Function countPublications(ByVal authorID As Integer, _ ByVal publicationType As Integer) As Integer Dim authPubs As New PublicationsDataSet.tblPublicationsDataTable authPubs = Me.getAuthorsPublications(authorID) Dim dv As New DataView(authPubs) dv.RowFilter = "status=''published'' AND type=''" + _ publicationType.ToString + "''" Return dv.Count End Function

Para llamar a esta función para obtener un conteo de artículos por un autor de un tipo específico, podría

  1. llamar a la función con dos enteros

    countPublications (authorID, 1)

  2. configurar una enumeración para que pueda escribir

    countPublications (authorID, pubType.Article)

    o

  3. de alguna manera use la tabla de tipo de publicación para filtrar el conjunto de datos de publicación, pero no entiendo cómo hacerlo.

¿Qué otros enfoques debería considerar?

Gracias


Habiendo mantenido este tipo de cosas en una vida anterior, estoy de acuerdo con Steven en que una enum es bastante razonable. Su código es claro y una enum significa que debe actualizar solo un archivo si agrega tipos de datos.

También sugiero comentar la enum , dejando en claro que los valores deben coincidir con los de la tabla Publication Types en su base de datos.

¡Buena pregunta por cierto! +1 para explicar la pregunta con tanta claridad y tomarse el tiempo para pensar en soluciones antes de publicarlas.


Por diversas razones, sería bueno mantener listas como mi lista de tipos de publicación y otras en un solo lugar; la base de datos. Entonces solo hay un lugar para que ellos cambien. Sin embargo, me parece que esto agrega algo de complejidad al código y aún necesitaría tener algunos elementos codificados en el código si quisiera referirme a un tipo de publicación específica como Artículos de revista. Por lo tanto, tener un tipo enumerado que refleje los datos en la tabla me da la posibilidad de llamar a mi función de recuento de una manera legible

countPublications(authorID, publicationType.JournalArticle)

Si los datos de la tabla cambian, lo cual es poco probable, puedo hacer un comentario en la base de datos para recordarle al responsable (probablemente a mí) que actualice el tipo enumerado en el código y viceversa.

Gracias a todos por sus respuestas o comentarios. Ahora puedo continuar con mi mente a gusto.


si los tipos de publicación son esencialmente estáticos, las enumeraciones están bien

Existe una pequeña diferencia entre la inclusión

inner join lookuptable lt on lt.id = (int)myenum.sometype

en una consulta y agregando

inner join lookuptable lt on lt.name = "somehardcodeddescription"

ambas son constantes incrustadas, la primera solo tiene un tipo bien definido detrás de ella

alternativamente podrías usar

inner join lookuptable lt on lt.name = myenum.sometype.ToString

prefiero el anterior

si, por otro lado, se pueden agregar nuevos tipos de búsqueda después de implementar el código, una enumeración quedará obsoleta rápidamente;

pero si hay un conjunto central de valores de enum estáticos que el código necesita y el resto no importa, entonces la solución anterior sigue estando bien

como de costumbre, "depende" ;-)