Creación de la Base de Datos

Preparación de la estructura

  • Creamos una base de datos SQLite

Leer diccionario de datos

dicc_ganaderos <- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_ganaderos")
dicc_dispositivos <- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_dispositivos")
dicc_explotaciones <- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_explotaciones")
  • Crear base de datos y tablas
con <- dbConnect(RSQLite::SQLite(), 
                 dbname = here::here("db/db_gps.db"))

Diccionario Ganaderos

Creo la tabla dicc_ganaderos y especifico el campo id_ganadero como KEY. Ojo, no utilizo el nombre del ganadero por Ley Protección de Datos.

# %s(%s en la siguiente función hace referencia a cada uno de los argumentos posteriores

sql_statement <- sprintf("CREATE TABLE %s(%s, PRIMARY KEY(%s))", "dicc_ganaderos",
        paste(names(dicc_ganaderos), collapse =", "), 
        names(dicc_ganaderos)[1])

dbExecute(conn=con, statement=sql_statement)
dbWriteTable(con, "dicc_ganaderos", dicc_ganaderos, append = TRUE, row.names = FALSE)

Diccionario Explotaciones

Creo la tabla dicc_explotaciones y especifico el campo id_ganadero como FOREING KEY de la tabla dicc_ganaderos.

sql_statement <- sprintf("CREATE TABLE %s(%s, FOREIGN KEY(%s) REFERENCES %s(%s))", "dicc_explotaciones",
        paste(names(dicc_explotaciones), collapse =", "), 
        names(dicc_explotaciones)[1], "dicc_ganaderos", 
        names(dicc_ganaderos)[1])

dbExecute(conn=con, statement=sql_statement)
dbWriteTable(con, "dicc_explotaciones", dicc_explotaciones, append = TRUE, row.names = FALSE)

Diccionario Dispositivos

Creo la tabla dicc_dispositivos y especifico el campo codigo_gps como KEY. Incluyo el campo id_ganadero como FOREING KEY de la tabla dicc_ganaderos

sql_statement <- sprintf("CREATE TABLE %s(%s, PRIMARY KEY (%s) FOREIGN KEY(%s) REFERENCES %s(%s))",
                         "dicc_dispositivos",
                         paste(names(dicc_dispositivos), collapse =", "), 
                         names(dicc_dispositivos)[4], 
                         names(dicc_dispositivos)[2],
                         "dicc_ganaderos", 
                         names(dicc_ganaderos)[1])

dbExecute(conn=con, statement=sql_statement)
dbWriteTable(con, "dicc_dispositivos", dicc_dispositivos, append = TRUE, row.names = FALSE)

Tabla datos_gps

Creo la tabla datos_gps. Incluyo el campo codigo_gps como FOREIGN KEY de la tabla dicc_dispositivos

sql_statement <- "CREATE TABLE datos_gps(
id INTEGER PRIMARY KEY AUTOINCREMENT,codigo_gps,
                      id_itm INTEGER, 
                      id_user INTEGER, 
                      lat,
                      lng, 
                      time_stamp DATETIME,
                      month INTEGER, FOREIGN KEY(codigo_gps) REFERENCES dicc_dispositivos(codigo_gps))"


dbExecute(conn=con, statement=sql_statement)

Estructura de la base de datos

La estructura de la base de datos se puede ver en Figure 1

# Para crear este esquema:
# 1. Exporto la estructura de la base de datos desde DB Browser Lite (ver /db/schema_db_gps.sql)
# 2. Edito el archivo y guardo como /db/schema_db_gps_edited.txt 
# 3. Genero png en https://dbdiagram.io/

Figure 1: Esquema de la base de datos