<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Tema: Bases de datos | Sentido Web</title>
<link>http://sentidoweb.com/</link>
<description>Actualidad y maneras de hacer en Internet (programación, diseño, tendencias, negocios...)</description>
<language>es</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Thu, 28 Feb 2008 12:30:00 +0000</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.2</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>Cuando no hay que normalizar la base de datos</title>
<description><![CDATA[<p>La normalización es el proceso por el cual se optimizan las tablas de una base de datos para que no haya datos redundantes, se optimice el espacio en disco y se evite errores en la actualización de datos. Ahora bien, aunque la normalización es el estado idóneo para la base de datos, eso no quiere decir que sea el más idóneo para nuestra aplicación.</p>

<p>Existen un caso perfecto cuando la normalización no es adecuada y es cuando la obtención de datos es lenta. Si normalizamos y eso implica que para obtener los datos tengamos que realizar varios joins, al haber muchos datos puede darse la situación de que las consultas sean lentas.</p>

<p>Algo parecido <a href="http://bitacoras.com/noticias/archivos/mejora-en-la-carga-de-perfiles.php">nos ha pasado en Bitacoras.com</a>, ha sido necesario <em>desnormalizar</em> para mejorar la velocidad de respuesta. Imaginaros, teníamos que mostrar dentro de la <a href="http://bitacoras.com/usuario/displaynone/comunidad">Comunidad</a> de los usuarios los posts de los usuarios a los que sigues y su actividad (tal sigue a cual). </p>

<p>Como se puede apreciar son datos totalmente distintos y lógicamente van en tablas diferentes, y a parte hay que obtener los datos de los usuarios a los que se sigue y usarlos para obtener sus posts (de todas sus bitácoras) y sus actividades y ordenarlos por fecha descendiente. Solo de leerlo ya me aparecen unos cuantos joins por la mente.</p>

<p>La solución ha sido crear una tabla de enlaces a ids de otras tablas. En la misma tabla tengo enlaces a los posts y a las actividades y a los ids de los usuarios. Es más rápido (unas 300 veces) debido a que existe paginación y es preferible obtener ids de dos tablas en una consulta sencilla y luego obtener n registros sencillos, que obtenerlo en una única consulta.</p>

<p>Otra cosa que he observado es que puede ser más rápido obtener una lista de IDs (sacadas de una consulta) y luego comparar haciendo un <em>IN</em> que hacer un join de dos tablas, cuando una de estas tablas se obtiene mediante una consulta.</p>

<p>Al final lo que nos queda es que la teoría no es siempre válida y que las situaciones en las que nos podemos encontrar hacen que la solución menos elegante sea la más efectiva</p>]]></description>
<link>http://sentidoweb.com/2008/02/28/cuando-no-hay-que-normalizar-la-base-de-datos.php</link>
<guid>http://sentidoweb.com/2008/02/28/cuando-no-hay-que-normalizar-la-base-de-datos.php</guid>
<category>Bases de datos</category>
<pubDate>Thu, 28 Feb 2008 12:30:00 +0000</pubDate>
</item>
<item>
<title>MyOODB: base de datos orientada a objetos</title>
<description><![CDATA[<p><strong>MyOODB</strong> (Java) es una base de datos orientada a objetos, forma parte de un SDK, que junto a MyOOWEB y MyOOSDK, permite realizar aplicaciones web pequeñas pero muy robustas.</p>

<p>Dispone de un cliente que permite acceder a los datos mediante los protocolos TCP, TCPS, HTTP o HTTPS. A diferencia de otras OODB, en este caso los objetos solo existen en el servidor, en la aplicación solo se tratan de objetos distribuidos.</p>

<p>Otra de las características a destacar es que tiene un sistema de anti-corrupción de datos, si unos bloques del sistema de ficheros están corruptos, no se pierde la BD.</p>

<p><a href="http://www.myoodb.org/">MyOODB</a></p>]]></description>
<link>http://sentidoweb.com/2008/02/05/myoodb-base-de-datos-orientada-a-objetos.php</link>
<guid>http://sentidoweb.com/2008/02/05/myoodb-base-de-datos-orientada-a-objetos.php</guid>
<category>Bases de datos</category>
<pubDate>Tue, 05 Feb 2008 17:15:00 +0000</pubDate>
</item>
<item>
<title>CowDb: base de datos orientada a objetos</title>
<description><![CDATA[<p><strong>Cow Database</strong> es una base de datos orientada a objetos (OODBMS). Uno de los problemas de esta tecnología es a la hora de indexar los datos.</p>
<p>Las características que ofrece esta base de datos nos encontramos con:</p>
<ul><li><strong>Ligera</strong>: poco uso de memoria y posibilidad de configurar el tamaño del cache.</li>
<li><strong>Operaciones sencillas</strong>: cada base de datos tiene un único fichero de disco.</li>
<li><strong>Robustez</strong>: totalmente transaccional, la recuperación es total y automática.</li>
<li><strong>Ramificaciones</strong>: se pueden hacer a cualquier nivel.</li>
<li><strong>Extensible</strong></li>
<li><strong>Rutas</strong>: cada objeto tiene una ruta mediante con la cual se puede acceder.</li>
<li><strong>Enlaces simbólicos</strong></li></ul>
<p><a href="http://agilewiki.wiki.sourceforge.net/CowDb">CowDb</a></p>]]></description>
<link>http://sentidoweb.com/2008/01/09/cowdb-base-de-datos-orientada-a-objetos.php</link>
<guid>http://sentidoweb.com/2008/01/09/cowdb-base-de-datos-orientada-a-objetos.php</guid>
<category>Bases de datos</category>
<pubDate>Wed, 09 Jan 2008 17:00:00 +0000</pubDate>
</item>
<item>
<title>Microsoft ofrece un driver SQL Server 2005 para PHP</title>
<description><![CDATA[<p>Microsoft ha contribuido con PHP para crear un driver para acceder a SQL Server 2005. Diseñado para que permita una integración fiable y escalable con SQL Server para aplicaciones PHP desarrolladas en plataforma Windows. </p>

<p>Se trata de una extensión para PHP5 que permite leer y escribir data dentro de los scripts PHP, incluyendo procedimientos para acceder a los datos de SQL Server 2005 y SQL Server 2000 (incluyendo Express Edition), y hace uso de las características de PHP, como la lectura y escritura de objetos grandes.</p>

<p>Existe también un <a href="http://blogs.msdn.com/sqlphp">blog</a> y un <a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=87&amp;SiteID=1">foro</a>.</p>

<p><a href="http://www.microsoft.com/sql/technologies/php/default.mspx">SQL Server 2005 Driver for PHP</a></p>

<p>Vía / <a href="http://www.php-mag.net/magphpde/magphpde_news/psecom,id,27488,nodeid,5.html">International PHP Magazine</a></p>]]></description>
<link>http://sentidoweb.com/2007/10/26/microsoft-ofrece-un-driver-sql-server-2005-para-php.php</link>
<guid>http://sentidoweb.com/2007/10/26/microsoft-ofrece-un-driver-sql-server-2005-para-php.php</guid>
<category>PHP</category>
<pubDate>Fri, 26 Oct 2007 11:30:00 +0000</pubDate>
</item>
<item>
<title>Outer joins en SQL</title>
<description><![CDATA[<p>Hace días que llevo pensando en explicar cómo hacer un outer join en SQL (MySQL y Oracle), y hoy he encontrado unos diagramas que explican los diferentes tipos de joins que podemos hacer (MySQL).</p>
<p>El outer join se usa cuando queremos que obtener todos los campos de una tabla que cumplen una condición y los campos de otra tabla que coinciden con los de la primera tabla.</p>
<p><img alt="outerjoin.png" src="http://sentidoweb.com/img/2007/10/outerjoin.png" width="250" height="172" class="center" /></p>
<p>Imaginamos que tenemos una tabla de palabras en inglés y una tabla de traduciones:</p>
<pre>Tabla : <strong>palabras
</strong><em>id / palabra</em>
 1 / bird
 2 / flower
 3 / sky
 4 / tree</pre>
<pre>Tabla: <strong>traducciones</strong>
<em>id / traduccion / idioma</em>
 1 / pájaro     / es
 3 / cielo      / es</pre>
<p>Se trata de tener la tabla de palabras y sus correspondientes traducciones (en este caso solo lo he hecho para español, pero se podrían incluir registros para otros idiomas). Si nos fijamos veremos que un join normal no lo podremos hacer porque si igualamos el id de palabras y traducciones habrá registros que no se mostrarán en la tabla de palabras porque no existen sus correspondientes en la tabla de traducciones. Por ello deberemos ejecutar las siguientes instrucciones en MySQL y Oracle:</p>
<pre>/* MySQL */
SELECT *
  FROM palabras
  LEFT OUTER JOIN traducciones
    ON palabras.id = traducciones.id

/* Oracle */
SELECT palabra, traduccion
  FROM palabras, traducciones
 WHERE palabras.id = traducciones.id (+)</pre>
<p>Echadle un vistazo al resto de representaciones gráficas de los joins porque son muy aclaratorias.</p>
<p><a href="http://www.codinghorror.com/blog/archives/000976.html">A Visual Explanation of SQL Joins</a></p>]]></description>
<link>http://sentidoweb.com/2007/10/22/outer-joins-en-sql.php</link>
<guid>http://sentidoweb.com/2007/10/22/outer-joins-en-sql.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 22 Oct 2007 17:30:00 +0000</pubDate>
</item>
<item>
<title>Oracle creará un driver open source para PHP</title>
<description><![CDATA[<p><img alt="Oracle" src="http://sentidoweb.com/img/2006/04/oracle.png" class="right" height="53" width="175" />A parte de la <a href="http://news.google.es/news?hl=es&rlz=1B3GGGL_esES177ES205&q=oracle+bea&um=1&ie=UTF-8&ncl=1156738349&sa=X&oi=news_result&resnum=1&ct=more-results&cd=1">casi compra</a> de <a href="http://www.bea.com">Bea</a> por parte de <a href="http://Oracle.com">Oracle</a> (sería una buena noticia para los que desarrollen con Weblogic), nos enteramos de una gran noticia para los desarrolladores de PHP, y es que Oracle contribuye con un driver PHP open source para su <acronym title="Oracle Call Interface">OCI8</acronym>. Este driver nos permite acceder a las características que nos ofrece la base de datos de Oracle, pudiendo así disponer del pool de conexiones, entre otras cosas.</p>

<p>Uno de las prioridades de Oracle es hacerse un hueco en la web2.0, para lo cual en colaboración de Zend pretende sacar este driver para así poder realizar aplicaciones que necesiten la robustez de la base de datos Oracle.</p>

<p><a href="http://www.php-mag.net/magphpde/magphpde_news/psecom,id,27459,nodeid,5.html">Oracle Contributes Open Source Driver for PHP</a></p>]]></description>
<link>http://sentidoweb.com/2007/10/15/oracle-creara-un-driver-open-source-para-php.php</link>
<guid>http://sentidoweb.com/2007/10/15/oracle-creara-un-driver-open-source-para-php.php</guid>
<category>Bases de datos</category>
<pubDate>Mon, 15 Oct 2007 17:30:00 +0000</pubDate>
</item>
<item>
<title>Juntion PHP: capa de persistencia de datos</title>
<description><![CDATA[<p><img alt="junction.png" src="http://sentidoweb.com/img/2007/10/junction.png" width="150" height="62" class="right" /><strong>Juntion PHP</strong> es una capa de persistencia de datos desarrollada por la gente de Zend. Para aquellos que no les suene qué es una capa de persistencia de datos, diremos que se trata de una capa intermedia en nuestra aplicación que ofrece servicios de persistencia<br />
y recuperación de información a las capas superiores.</p>

<p>Junction mapea la base de datos a objetos, permitiendo al desarrollador concentrarse en otros detalles de la aplicación. Debido a ello no nos tendremos que preocupar más en las sentencias <acronym title="Create, Red, Update y Delete">CRUD</acronym>.</p>

<p>Además de lo dicho anteriormente, Junction por ahora permite cláusulas WHERE sencillas, configuración de la base de datos, capa <acronym title="Data Access Object">DAO</acronym>, tests y buena documentación ya sea en el código como para el usuario final.</p>

<p><a href="http://junctionphp.com/">Juntion PHP</a></p>

<p>Vía / <a href="http://www.phpdeveloper.org/news/8791">PHPDeveloper.org</a></p>]]></description>
<link>http://sentidoweb.com/2007/10/08/juntion-php-capa-de-persistencia-de-datos.php</link>
<guid>http://sentidoweb.com/2007/10/08/juntion-php-capa-de-persistencia-de-datos.php</guid>
<category>PHP</category>
<pubDate>Mon, 08 Oct 2007 10:45:00 +0000</pubDate>
</item>
<item>
<title>WWW SQL Designer: diseño de bases de datos online</title>
<description><![CDATA[<p><strong>WWW SQL Designer</strong> es una aplicación online que nos permite editar nuestro propio modelo de datos y exportarlo a diferentes bases de datos como MSSQL, MySQL, Oracle o PostgreSQL. A parte permite exportar a XML, importar a XML, guardar directamente en base de datos y leer desde base de datos.</p>

<p><img alt="sqldesign.png" src="http://sentidoweb.com/img/2007/10/sqldesign.png" width="350" height="201" class="center" /></p>

<p>La creación de las tablas y de las relaciones entre ellas es sencillo, para las relaciones solo es necesario desplazar la PK en una tabla y el campo y la relación se crearán automáticamente.</p>

<p>La aplicación se puede descargar y nos permite guardar nuestros trabajos. La interfaz me ha gustado mucho ya que permite mover las tablas, las relaciones se redibujan cuando las tablas se organizan, tiene una pantalla de zoom para movernos a la posición que queramos y la edición de los campos y tablas es muy sencillo.</p>

<p><a href="http://ondras.zarovi.cz/sql/">WWW SQL Designer</a></p>

<p>Vía / <a href="http://www.dbrunas.com.ar/">DbRunas</a></p>]]></description>
<link>http://sentidoweb.com/2007/10/02/www-sql-designer-diseno-de-bases-de-datos-online.php</link>
<guid>http://sentidoweb.com/2007/10/02/www-sql-designer-diseno-de-bases-de-datos-online.php</guid>
<category>Bases de datos</category>
<pubDate>Tue, 02 Oct 2007 08:45:00 +0000</pubDate>
</item>
<item>
<title>phpCodeGenerator: código para tu BD automático</title>
<description><![CDATA[<p><strong>phpCodeGenerator</strong> es una librería para generar sitios web desde una base de datos. Permite leer la base de datos y generar una web que permita crear, listar, editar, modificar, eliminar y buscar registros.</p>

<p>Funciona con cualquier base de datos compatible con <a  href="https://sourceforge.net/projects/adodb" >ADODB</a>, como MySQL, Microsoft Access o PostgreSQL. La información que contiene una BD: el esquema de la BD, las tablas, campos y propiedades, es suficiente para poder realizar unas clases que permita crear, editar, actualizar y eliminar registros, una base para que el desarrollador luego pueda realizar su aplicación web más facilmente.</p>

<p>El framework phpCG permite construir aplicaciones PHP orientadas a objetos que sean extensibles, portables y escalables.</p>

<p><a href="http://phpcg.sourceforge.net">phpCodeGenerator</a></p>

<p>Vía / <a href="http://www.php-mag.net/magphpde/magphpde_news/psecom,id,27339,nodeid,5.html">International PHP Magazine</a></p>]]></description>
<link>http://sentidoweb.com/2007/07/12/phpcodegenerator-codigo-para-tu-bd-automatico.php</link>
<guid>http://sentidoweb.com/2007/07/12/phpcodegenerator-codigo-para-tu-bd-automatico.php</guid>
<category>PHP</category>
<pubDate>Thu, 12 Jul 2007 08:45:00 +0000</pubDate>
</item>
<item>
<title>Oracle 11g para mañana miércoles</title>
<description><![CDATA[<p><img alt="Oracle" src="http://sentidoweb.com/img/2006/04/oracle.png" class="right" height="53" width="175" />Después de 9 meses de <a href="http://sentidoweb.com/2006/10/24/oracle-anuncia-la-version-11g-beta-de-su-bd.php">beta</a>, Oracle anuncia que mañana saldrá a la luz la versión 11g de su base de datos.</p>

<p>Entre las novedades encontramos compresión de datos, tecnología <em>flashback</em> para la recuperación de datos y actualizaciones automáticas.</p>

<p>Para los ansiosos, se va a poder seguir la presentación que harán mañana (a mí me dice ahora que dentro de 1 día y 6 horas) en este <a href="http://www.oracle.com/pls/ebn/live_viewer.main?p_shows_id=5717957">enlace</a> (se necesita Real Player).</p>

<p><a href="http://news.com.com/8301-10784_3-9741326-7.html?part=rss&subj=news&tag=2547-1_3-0-20">Oracle Database 11g ready for launch</a></p>]]></description>
<link>http://sentidoweb.com/2007/07/10/oracle-11g-para-manana-miercoles.php</link>
<guid>http://sentidoweb.com/2007/07/10/oracle-11g-para-manana-miercoles.php</guid>
<category>Bases de datos</category>
<pubDate>Tue, 10 Jul 2007 09:45:00 +0000</pubDate>
</item>
<item>
<title>CouchDb: base de datos documental</title>
<description><![CDATA[<p><img alt="couchdb.png" src="http://sentidoweb.com/img/2007/05/couchdb.png" width="162" height="64" class="right" /><strong>CouchDb</strong> es una <a href="http://es.wikipedia.org/wiki/Base_de_datos#Bases_de_datos_documentales">base de datos documental</a> distribuida con sistema de replicación bidireccional.</p>

<p>No se trata de una base de datos relacional, sino documental. Es distribuida, robusta, con replicación incremental con detección de conflictos. Permite realizar querys e índices.</p>

<p>Aunque no es una base de datos orientada a objetos (en el sentido de capa para un lenguaje de programación), si que los documentos son objetos que están formados por nombres de campos y valores (texto, números y fechas).</p>

<p>CouchDb puede ser útil para aplicaciones como foros, bug tracking, wikis, to-dos y mucho más. Aún está en fase alpha, esperemos que llegue a la calidad y popularidad de otras bases de datos como MySQL.</p>

<p><a href="http://couchdb.com">CouchDb</a></p>]]></description>
<link>http://sentidoweb.com/2007/05/18/couchdb-base-de-datos-documental.php</link>
<guid>http://sentidoweb.com/2007/05/18/couchdb-base-de-datos-documental.php</guid>
<category>Bases de datos</category>
<pubDate>Fri, 18 May 2007 09:50:00 +0000</pubDate>
</item>
<item>
<title>Oracle y PHP</title>
<description><![CDATA[<p>La gente de Oracle han reescrito un libro que nos explica todo lo necesario para desarrollar aplicaciones en PHP que accedan a Oracle, está en formato PDF y la versión del documento es la 1.4. Este libro no es una guía completa de PHP y Oracle, ya que se supone que se tienen conocimientos básicos de PHP y SQL.</p>
<p>El libro está formado por 17 capítulos:</p>
<ul><li><strong>Introducción</strong>: introducciones sobre Oracle y PHP.</li>
<li><strong>Extensiones PHP para Oracle</strong>: extensiones Oracle, OCI8 y PDO.</li>
<li><strong>Instalación de Oracle Database 10g Express Edition</strong>: aunque el manual se centra en esta versión, también es válida para cualquier versión de Oracle actual.</li>
<li><strong>Uso de Oracle Database 10g</strong>: trabajar con SQLs, PLs, crear usuarios, monitorear las sesiones, crear conexiones a la BD, crear informes y mucho más.</li>
<li><strong>Instalar Apache</strong>: tanto en Linux como en Windows.</li>
<li><strong>Instalar PHP</strong>: OCI en PHP4 y PHP5 tanto para Linux como para Windows y PDO en Linux y Windows.</li>
<li><strong>Instalar Zend Core para Oracle</strong>: instalación y administración de Zend Core para Oracle.</li>
<li><strong>Conectar a Oracle mediante OCI8</strong>: tipos de conexión, variables de entorno de Oracle, cerrar conexiones Oracle (algo que se suele olvidar hacer la gente).</li>
<li><strong>Ejecutar SQL mediante OCI8</strong>: inserciones, modificaciones, transacciones, errores OCI8, tunning de aplicaciones.</li>
<li><strong>Usar PL/SQL en OCI8</strong>: crear procedimientos, errores, cursores.</li>
<li><strong>Objetos grandes</strong>: LOBs y BFILEs.</li>
<li><strong>Uso de XML en Oracle y PHP</strong>: uso de la extensión SimpleXML y acceso a datos de Oracle mediante HTTP.</li>
<li><strong>Globalización</strong>: manipulación de Strings, Locale, codificación de caracteres de los HTML, formato de fechas y números.</li>
<li><strong>Debug</strong>.</li>
<li><strong>Testing</strong>: ejecutar tests OCI8, fallo en los tests, creación de tests.</li>
<li><strong>Nombre de funciones OCI8 en PHP</strong>.</li>
<li><strong>Extesión de Oracle obsoleta</strong>: comparación entre la extensión Oracle y OCI8.</li></ul>
<p><a href="http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf">The Underground PHP and Oracle Manual</a></p>
<p>Vía / <a href="http://blogs.oracle.com/opal/discuss/msgReader$125">Christopher Jones on OPAL</a></p>]]></description>
<link>http://sentidoweb.com/2007/05/17/oracle-y-php.php</link>
<guid>http://sentidoweb.com/2007/05/17/oracle-y-php.php</guid>
<category>PHP</category>
<pubDate>Thu, 17 May 2007 11:00:00 +0000</pubDate>
</item>
<item>
<title>phpPgAdmin: administra PostgreSQL desde la web</title>
<description><![CDATA[<p>Casi todos conocemos <a href="http://phpmyadmin.net">phpmyadmin</a>, una aplicación web para administrar nuestras bases de datos en MySQL. En este caso se trata de <strong>phpPgAdmin</strong>, lo mismo pero para <a href="http://PostgreSQL.org">PostgreSQL</a>. No todo el mundo trabaja con MySQL, por lo que esta herramienta le vendrá muy bien a aquellos que usen esta base de datos.</p>

<p><img alt="phppgadmin.png" src="http://sentidoweb.com/img/2007/03/phppgadmin.png" width="350" height="245" class="center"/></p>

<p>Entre las características que ofrece nos encontramos con la posibilidad de administrar varios servidores, soporte a múltiples versiones de PostgreSQL, administración de usuarios, grupos, bases de datos, esquemas, etc..., manipulación sencilla de datos, exportar los datos a diferentes formatos, importar sentencias SQL y mucho más.</p>

<p>Ahora solo falta que hagan algo para Oracle para hacerme feliz.</p>

<p><a href="http://phppgadmin.sourceforge.net/">phpPgAdmin</a></p>]]></description>
<link>http://sentidoweb.com/2007/03/29/phppgadmin-administra-postgresql-desde-la-web.php</link>
<guid>http://sentidoweb.com/2007/03/29/phppgadmin-administra-postgresql-desde-la-web.php</guid>
<category>Utilidades</category>
<pubDate>Thu, 29 Mar 2007 16:00:00 +0000</pubDate>
</item>
<item>
<title>Usar polimorfismo en PHP5 para acceder a diferentes BD</title>
<description><![CDATA[<p>Gracias al tratamiento de objetos que nos permite PHP5, es posible diseñar aplicaciones de una forma más eficiente. Un caso de ello es el <a href="http://es.wikipedia.org/wiki/Polimorfismo_(programaci%C3%B3n_orientada_a_objetos)">polimorfismo</a>, lo cual va a permitir acceder y trabajar con diferentes tipos de bases de datos de una forma única.</p>

<p>En el artículo en el que hacemos referencia, explican detalladamente cómo usar el polimorfismo para acceder a datos mediante MySQL y SQLite. <strong>Para ello se crearán una clase abstracta y dos clases que extenderán de esta, siendo cada una de estas las encargadas de tratar el acceso a MySQL o a SQLite</strong>.</p>

<p>Después se deberá crear una clase que maneje estas clases, dependiendo de un parámetro, se usará una de las clases (MySQL o SQLite). Esta última clase será la que instancie el usuario final, por lo que para él será transparente el tratamiento que se haga de una u otra base de datos.</p>

<p>Algo que también destacaría de este artículo es la forma de no hacerlo, algo que me he encontrado en alguna ocasión en Java (donde hay polimorfismo desde siempre). La forma incorrecta de hacerlo es creando una única clase y diferenciando en cada método diferentes códigos dependiendo de si se trata de una BD u otra.</p>

<p><a href="http://www.devshed.com/c/a/PHP/Abstracting-Database-Access-Using-Polymorphism-with-Objects-in-PHP-5/">Abstracting Database Access Using Polymorphism with Objects in PHP 5 </a></p>]]></description>
<link>http://sentidoweb.com/2007/03/28/usar-polimorfismo-en-php5-para-acceder-a-diferentes-bd.php</link>
<guid>http://sentidoweb.com/2007/03/28/usar-polimorfismo-en-php5-para-acceder-a-diferentes-bd.php</guid>
<category>PHP</category>
<pubDate>Wed, 28 Mar 2007 10:45:00 +0000</pubDate>
</item>
<item>
<title>Consejos para diseñar una base de datos</title>
<description><![CDATA[<p>Diseñar una base de datos no es algo sencillo y sí muy importante, ya que un mal diseño conlleva dificultades para desarrollar la aplicación o una aplicación compleja. Unos consejos que realmente son muy necesarios y muchas veces no se llevan a cabo.</p>
<ul><li><strong>Mal diseño</strong>: el diseño es lo fundamental, primero hay que saber qué es lo que se necesita mostrar para luego diseñar correctamente la base de datos. Yo personalmente me he encontrado con diseños iniciales muy básicos que luego han ido parcheando y haciendo modificaciones drásticas para ajustarlas a un modelo que era el mismo desde el inicio de la aplicación.</li>
<li><strong>Ignorar la normalización</strong>: la normalización es fundamental para un buen rendimiento y una sencilla programación.</li>
<li><strong>Nomenclatura no estándar</strong>: los nombres deben significar algo para que sea sencillo de comprender a simple vista. A parte, la nomenclatura debe ser constante en todo el diseño.</li>
<li><strong>Falta de documentación</strong>: esto es una constante en todo el mundo de la programación, y en las bases de datos no va a ser menos. Que tu sepas que significa una tabla o un campo, no quiere decir que otra persona que entre en el proyecto vaya a saberlo con la misma facilidad que tú.</li>
<li><strong>Una tabla que agrupa a muchas</strong>: un error normal es pensar que un diseño con muchas tablas es más complejo, y que es mejor meterlo todo en una única tabla.</li>
<li><strong>Usar un identificador como única clave primaria</strong>: no siempre es correcto usar únicamente un identificador numérico secuencial como clave primaria única.</li>
<li><strong>No usar las características de SQL para proteger la integridad de los datos</strong>: hay que tener en cuenta las reglas de campos nulos, tamaños de los campos y claves secundarias en el diseño para obtener una mejor integridad de datos.</li>
<li><strong>No usar procedimientos almacenados para obtener los datos</strong>: es una forma de separar la capa de la base de datos de la capa del usuario. Aportan seguridad, encapsulamiento, mantenibilidad y rapidez. Yo también añadiría el uso de vistas.</li>
<li><strong>Falta de pruebas</strong>: algo para mí muy importante es hacer pruebas de estres, para saber si la base de datos va a aguantar el volumen de datos que necesitará la aplicación. Comprobar el tiempo de ejecución de las sentencias para añadir índices, etc...</li></ul>
<p>Podéis ver todos estos puntos muy bien explicados y de forma extensa en el artículo original.</p>
<p><a href="http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/">Ten Common Database Design Mistakes</a></p>]]></description>
<link>http://sentidoweb.com/2007/03/19/consejos-para-disenar-una-base-de-datos.php</link>
<guid>http://sentidoweb.com/2007/03/19/consejos-para-disenar-una-base-de-datos.php</guid>
<category>Bases de datos</category>
<pubDate>Mon, 19 Mar 2007 10:30:00 +0000</pubDate>
</item>


</channel>
</rss>