Creación de la Base de Datos
Preparación de la estructura
- Creamos una base de datos SQLite
Leer diccionario de datos
<- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_ganaderos")
dicc_ganaderos <- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_dispositivos")
dicc_dispositivos <- readxl::read_excel(here::here("db/dicc_gps.xlsx"), sheet = "dicc_explotaciones") dicc_explotaciones
- Crear base de datos y tablas
<- dbConnect(RSQLite::SQLite(),
con 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
<- sprintf("CREATE TABLE %s(%s, PRIMARY KEY(%s))", "dicc_ganaderos",
sql_statement 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
.
<- sprintf("CREATE TABLE %s(%s, FOREIGN KEY(%s) REFERENCES %s(%s))", "dicc_explotaciones",
sql_statement 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
<- sprintf("CREATE TABLE %s(%s, PRIMARY KEY (%s) FOREIGN KEY(%s) REFERENCES %s(%s))",
sql_statement "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
<- "CREATE TABLE datos_gps(
sql_statement 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/