Por lo tanto, soy un programador relativamente nuevo que trabaja para obtener un título de licenciatura en ciencias empresariales con una cantidad muy pequeña de experiencia laboral. Al buscar trabajos de pasantía para mi programa, me he dado cuenta de que lo que he escuchado de varios profs - "trabajar con bases de datos representa el 90% de todos los trabajos modernos de informática" - parece que es cierto. Sin embargo, mi programa realmente no tiene cursos con bases de datos hasta el 3er año, así que al menos estoy tratando de aprender algunas cosas por mi cuenta.Mejores prácticas de base de datos para principiantes
He visto muy poco en SO e Internet en general para alguien como yo. Parece que hay toneladas de tutoriales sobre la mecánica de cómo leer y escribir datos en una base de datos, pero poco sobre las mejores prácticas asociadas. Para demostrar lo que estoy hablando, y para ayudar a conseguir a través de mi pregunta real, esto es lo que puede easily be found on the internet:
public static void Main()
{
using (var conn = new OdbcConnection())
{
var command = new OdbcCommand();
command.Connection = conn;
command.CommandText = "SELECT * FROM Customer WHERE id = 1";
var dbAdapter = new OdbcDataAdapter();
dbAdapter.SelectCommand = command;
var results = new DataTable();
dbAdapter.Fill(results);
}
// then you would do something like
string customerName = (string) results.Rows[0]["name"];
}
Y así sucesivamente. Esto es bastante simple de entender pero obviamente está lleno de problemas. Empecé con un código como este y rápidamente comencé a decir cosas como "bueno, parece tonto tener SQL en todas partes, debería poner todo eso en un archivo de constantes". Y entonces me di cuenta de que era tonto tener esas mismas líneas de código por todo el lugar y sólo hay que poner todas esas cosas con objetos de conexión, etc dentro de un método:
public DataTable GetTableFromDB (string sql)
{
// code similar to first sample
}
string getCustomerSql = String.Format(Constants.SelectAllFromCustomer, customerId);
DataTable customer = GetTableFromDB(getCustomerSql);
string customerName = (string) customer.Rows[0]["name"];
Esto parecía ser una gran mejora. Ahora es muy fácil, por ejemplo, cambiar de una conexión Odbc a una conexión SQLite. Pero esa última línea, acceder a los datos, todavía parecía incómoda; y todavía es un dolor cambiar un nombre de campo (como pasar de "nombre" a "CustName" o algo así). Empecé a leer sobre using typed Data sets or custom business objects. Todavía estoy un poco confundido por toda la terminología, pero decidí to look into it anyway. Me imagino que es estúpido confiar en un Asistente de base de datos brillante para hacer todo esto por mí (como en los artículos vinculados) antes de que realmente sepa lo que está pasando , y por qué. Así que tomé una puñalada en ella a mí mismo y empecé a recibir cosas como:
public class Customer
{
public string Name {get; set;}
public int Id {get; set;}
public void Populate()
{
string getCustomerSql = String.Format(Constants.SelectAllFromCustomer, this.Id);
DataTable customer = GetTableFromDB(getCustomerSql);
this.Name = (string) customer.Rows[0]["name"];
}
public static IEnumerable<Customer> GetAll()
{
foreach (...) {
// blah blah
yield return customer;
}
}
}
para ocultar las cosas mesa feo y proporcionan algunos tipos fuertes, permitiendo que el código fuera simplemente hacer las cosas como
var customer = new Customer(custId);
customer.Populate();
string customerName = customer.Name;
que es muy agradable. Y si la tabla de clientes cambia, los cambios en el código solo tienen que ocurrir en un solo lugar: dentro de la clase Customer
.
Entonces, al final de todo esto, mi pregunta es esta. ¿Mi lenta evolución del código de la base de datos ha ido en la dirección correcta? ¿Y a dónde voy después? Este estilo es muy bueno para bases de datos pequeñas, pero cuando hay toneladas de tablas diferentes, escribir todas esas clases para cada una sería un problema. He escuchado sobre el software que puede generar ese tipo de código para usted, pero todavía estoy confundido por la jerga DAL/ORM/LINQ2SQL/etc y esas enormes piezas de software son abrumadoras. Estoy buscando algunos recursos buenos, no abrumadoramente complejos, que puedan orientarme en la dirección correcta. Todo lo que puedo encontrar sobre este tema son artículos complejos que van más allá de mi cabeza, o artículos que simplemente te muestran cómo usar los asistentes de apuntar y hacer clic en Visual Studio y tal. También tenga en cuenta que estoy buscando información sobre el trabajo con bases de datos en código, no información sobre diseño/normalización de bases de datos ... hay mucho material bueno sobre eso.
Gracias por leer este mural gigante de texto.
Una cosa adicional: ¿debería marcarse como Wiki de la comunidad? Todavía soy bastante nuevo para SO. – jloubert
a) +1 ¡Para una pregunta inteligente y pensando en el futuro! b) No, creo que esta es una pregunta legítima, no una discusión comunitaria (aunque algunos estarían en desacuerdo) c) Probablemente necesites buscar en ORM (Asignación relacional de objetos). Es cómo puede definir programáticamente un enlace entre los objetos en su código y las filas en su base de datos. Deshace todo el componente "SQL en todas partes". – Aren
En mi entorno, tenemos muchas solicitudes de último minuto y nuestra política aquí es "Hacer que funcione", y no hay tiempo en las especificaciones para mucho más. Gran parte de nuestro código es copiar/pegar consultas SQL como la primera. Funciona, y realmente no tiene nada de malo, excepto que tal vez no se ve tan bonito o no sigue ningún patrón de diseño estándar. –