> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-7-la-construccion.-accediendo-a-los-datos/modelo-de-datos.md).

# Modelo de datos

SQLite ya está incluido en Azure Mobile Services. Optamos por SQLite, además de estar más maduro que otras alternativas.

SQLite es un sistema gestor de base de datos relacional, **A**tómico, **C**onsistente, **I**ntegro, permite el **A**islamiento de sus transacciones y **D**urable (o persistente), es decir, es “ACID Compliant”. Se trata de una única librería con un tamaño relativamente pequeño, unos 275kb y guarda la información de BD (tablas, índices, datos, etc.), en un sólo fichero.

Es multiplataforma y de dominio público y gracias a su pequeño tamaño es recomendado y está siendo muy usado en aplicaciones móviles: Windows Phone 8/8.1, Windows 10, Android, BlackBerry, Google Chrome, iOS, Maemo, Symbian, webOS, etc.

Actualmente, SQLite es utilizado por gran variedad de aplicaciones, entre la que destaca: Skype, Adobe Photoshop Elements, Mozilla Firefox, Opera, OpenOffice.org, Apple Mail, etc.

El sitio web oficial es <http://sqlite.org> y la descarga podemos realizarla desde este otro enlace: <http://sqlite.org/download.html>.

Para poder trabajar con SQLite desde Visual Studio seguiremos los siguientes pasos:

1. Descargar el paquete “.VSIX”, desde la página de descargas anteriormente indicada, Windows Runtime 8.1, Windows Phone 8.1 o Windows 10 / 10 Móvil.
2. Instalar el paquete “.VSIX” y reiniciar Visual Studio si estaba abierto. Para comprobar la instalación, desde el menú: *Tools – Extensions and Updates…,* de Visual Studio, acceder a las extensiones y actualizaciones instaladas:

   ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-b55a8acdbb48bbf81ba0517e59c248f04ac2f042%2Fimage8.png?alt=media)

**Figura 08.- Extensión de SQLite para Visual Studio instalada**

3. Añadir al proyecto Windows Phone la referencia “SQLite for Windows Phone 8.1” tal y como puede verse en la siguiente figura.

   ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-575c55886caa6bbdaa5e81278986baa8a62caa8b%2Fimage9.png?alt=media)

**Figura 09.- Añadiendo referencia "SQLLite for Windows Phone"**

Únicamente los proyectos Windows o Windows Phone, admitirán esta extensión.

4. Seguidamente, para los proyectos “Windows Phone” y “Data”, instalar desde NuGet, el paquete: “SQLite.Net.Async-PCL”, que a su vez instalará la dependencia “SQLite.Net-PCL” y junto a esta, se añadirá también, automáticamente la dependencia “SQLite.Net.Platform.WinRT”.

   ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-2fdac5ec4a8b9b6c56a4ec64ecf9596d350f8bd9%2Fimage10.png?alt=media)

**Figura 10.- Instalando paquete NuGet "SQLite.Net.Async-PCL"**

Aunque podríamos tratar las entidades o esquemas como parte del modelo (“Model”) e incluirlas en el proyecto “Shared”, lo mantendremos, sin embargo, en el proyecto “Data”. Asimismo, podremos compartirlo también con cualquier otro proyecto portable, incluso con proyectos Android e iOS si utilizamos Xamarin[¹](/de0an/capitulo-7-la-construccion.-accediendo-a-los-datos/que-hemos-aprendido.md#notas). Incluiremos también en el proyecto “Data” los mapeos convenientes para adaptar la información obtenida directamente de los repositorios, es decir, para convertir el modelo de datos, al modelo de entidades de negocio que usará la aplicación.

En primer lugar, definiremos e implementaremos las clases con el sufijo “Table”, las cuales representarán a las tablas en el modelo de datos en “SQLite”. La siguiente figura muestra el conjunto de estas entidades o tablas del modelo de datos además de la clase “**SQLiteMapper**” como transformador y conversor de datos.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-d7c0c836d3b2ad68288e1cb8c04365bb425907af%2Fimage11.png?alt=media)

**Figura 11.- Modelo de datos y "Mapper" para transformarlas al modelo de negocio**

El siguiente código, detalla la implementación de la clase “Project**Table**” que representa a la tabla de proyectos en SQLite a la que por simplificación, se le han excluido los atributos. Incluye también las declaraciones esenciales para la definición de una tabla SQLite.

```csharp
[Table("Projects")]
internal class ProjectTable : ObservableObject
{
    [PrimaryKey, MaxLength(32)]
    public string Id
    {
        get { return id; }
        set { Set(ref id, value); }
    }
    [MaxLength(75)]
    public string Title
    {
        get { return title; }
        set { Set(ref title, value); }
    }
    [MaxLength(250)]
    public string Detail
    {
        get { return detail; }
        set { Set(ref detail, value); }
    }
    public int ProjectType
    {
        get { return projectType; }
        set { Set(ref projectType, value); }
    }
    public int Status
    {
        get { return status; }
        set { Set(ref status, value); }
    }
    public DateTime CreationDate
    {
        get { return creationDate; }
        set { Set(ref creationDate, value); }
    }
    [Indexed]
    public DateTime LastUpdate
    {
        get { return lastUpdate; }
        set { Set(ref lastUpdate, value); }
    }
    public bool IsFavorite
    {
        get { return isFavorite; }
        set { Set(ref isFavorite, value); }
    }
}
```

{% hint style="info" %}
**Nota**: El Id se representa como un *string* dado que SQLite no permite tipos GUID, que es el tipo que más fácilmente se gestiona al trabajar con ficheros en el “StorageProvider”. Recordemos que vamos a poder trabajar con varios *Providers* aunque principalmente usemos SQLite.
{% endhint %}
