Evolució, anades d'olla i millores al projecte web Klaku.net

Després de moltes hores intentant migrar Klaku.net des de l'actual versió Drupal 6 a versions més modernes (D6 6.38, D7 o D8), he tingut unes quantes reflexions personals i finalment he decidit migrar i evolucionar Klaku.net a una base de dades personalitzada i un desenvolupament amb Bootstrap + CSS3 + HTML5 com a front-end i PHP + MySQL + Ajax com a back-end

De moment, he fet el següent disseny:


CREATE TABLE novajxo ( id_novajxo int not null auto_increment, dato date, uzanto varchar(20), titolo varchar(140), ligilo varchar(200), total_pozitivoj int(6), total_malpozitivoj int(6), etikedoj varchar(140), kategorio varchar(50), sxtato varchar(10), PRIMARY KEY(id_novajxo));

CREATE TABLE uzanto ( id_uzanto int not null auto_increment, dato date, nomo varchar(20), retadreso varchar(100), pasvorto varchar(100), bildo varchar(60), PRIMARY KEY(id_uzanto));

CREATE TABLE kontrolo ( id_kontrolo int not null auto_increment, id_novajxo int(6), uzanto varchar(20), ip varchar(60), dato date, tipo_baloto varchar(20), PRIMARY KEY(id_kontrolo));

CREATE TABLE komento (id_komento int not null auto_increment, novajxo_id int(6), uzanto varchar(20), priskribo text, PRIMARY KEY (id_komento));

CREATE TABLE sekcioj (id_sekcio int not null auto_increment, nomo_sekcio varchar(50), PRIMARY KEY (id_sekcio));

On tinc una configuració final de:


mysql> show tables;
+---------------------+
| Tables_in_klaku3_db |
+---------------------+
| komento |
| kontrolo |
| novajxo |
| sekcioj |
| uzanto |
+---------------------+
5 rows in set (0,00 sec)

mysql> describe komento;
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id_komento | int(11) | NO | PRI | NULL | auto_increment |
| novajxo_id | int(6) | YES | | NULL | |
| uzanto | varchar(20) | YES | | NULL | |
| priskribo | text | YES | | NULL | |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0,00 sec)

mysql> describe kontrolo;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id_kontrolo | int(11) | NO | PRI | NULL | auto_increment |
| id_novajxo | int(6) | YES | | NULL | |
| uzanto | varchar(20) | YES | | NULL | |
| ip | varchar(60) | YES | | NULL | |
| dato | date | YES | | NULL | |
| tipo_baloto | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
6 rows in set (0,01 sec)

mysql> describe novajxo;
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id_novajxo | int(11) | NO | PRI | NULL | auto_increment |
| dato | date | YES | | NULL | |
| uzanto | varchar(20) | YES | | NULL | |
| titolo | varchar(140) | YES | | NULL | |
| ligilo | varchar(200) | YES | | NULL | |
| total_pozitivoj | int(6) | YES | | NULL | |
| total_malpozitivoj | int(6) | YES | | NULL | |
| etikedoj | varchar(140) | YES | | NULL | |
| kategorio | varchar(50) | YES | | NULL | |
| sxtato | varchar(10) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
10 rows in set (0,01 sec)

mysql> describe uzanto;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id_uzanto | int(11) | NO | PRI | NULL | auto_increment |
| dato | date | YES | | NULL | |
| nomo | varchar(20) | YES | | NULL | |
| retadreso | varchar(100) | YES | | NULL | |
| pasvorto | varchar(100) | YES | | NULL | |
| bildo | varchar(60) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
6 rows in set (0,00 sec)

mysql>

mysql> describe sekcioj;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id_sekcio | int(11) | NO | PRI | NULL | auto_increment |
| nomo_sekcio | varchar(50) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
2 rows in set (0,00 sec)

mysql>

Després, he hagut de fer algunes modificacions posteriors a les taules, i segur que van eixint més canvis i modificacions:


ALTER TABLE novajxo ADD COLUMN priskribo text;
ALTER TABLE novajxo MODIFY dato INT(11) NOT NULL; #el camp date de Drupal és integer!
ALTER TABLE uzanto MODIFY dato INT(11) NOT NULL; #el camp date de Drupal és integer!
ALTER TABLE komento ADD COLUMN dato text;

Per a llegir la data de manera comprensible, farem:


mysql> SELECT FROM_UNIXTIME(dato) FROM uzanto WHERE id_uzanto="1";
+---------------------+
| FROM_UNIXTIME(dato) |
+---------------------+
| 2013-02-11 13:03:48 |
+---------------------+
1 row in set (0,00 sec)

Més formats amb la data, a l'hora de programar la web: https://kitt.hodsden.org/mysql/converting_mysql_timestamps_int11

MIGRACIÓ DE DADES

L'script python següent llegeix el fitxer CSV i va introduint les dades a les bases de dades noves:


# Importacio dels usuaris del CVS del Drupal 6 a la nova base de dades de Klaku
#
import csv

reader = csv.reader(open('taula_usuaris.csv', 'rb'))
fitxer_sql = open('taula_usuaris.sql', 'w') # Indiquem escriptura 'w'.
for index,row in enumerate(reader):
#Imprimim en consola cada linea
#print 'INSERT INTO uzanto (id_uzanto, dato, nomo, retadreso, pasvorto, bildo) VALUES ('+row[0]+', '+row[1]+', '+row[2]+', '+row[3]+', '+row[4]+', '+row[5]+');'

#Pero en el meu cas, vull generar un fitxer SQL per a les importacions
fitxer_sql.write("INSERT INTO uzanto (id_uzanto, dato, nomo, retadreso, pasvorto, bildo) VALUES ("'"' +row[0]+ '"'", "'"' +row[1]+ '"'", "'"' +row[2]+ '"'", "'"' +row[3]+ '"'", "'"' +row[4]+ '"'", "'"' +row[5]+ '"'");\n")

fitxer_sql.close()