Volevo sapere se esisteva una buona pratica per la gestione dell'elenco dei valori. Per esempio ho un registri della tabella di database come segue:Elenco dei valori: costanti di codice o database?
--------------- | logs | |-------------| | id | | idLogType | | message | | date | ---------------
La mia domanda riguarda il campo "idLogType". So che un enum non è il modo migliore per gestire questo tipo di campo, perché se voglio aggiungere nuovi valori devo ALTERARE il tavolo. Quindi creerò un elenco di valori.
Qual è la vostra raccomandazione per gestire l'elenco dei valori?
1. Solo con costanti PHP?
class LogTypeValues {
const LOGTYPE_CREATION = 1;
const LOGTYPE_EDITION = 2;
const LOGTYPE_DELETION = 3;
private $_logTypes = array();
public function __construct() {
$this->_logTypes[self::LOGTYPE_CREATION] = "Creation";
$this->_logTypes[self::LOGTYPE_EDITION] = "Edition";
$this->_logTypes[self::LOGTYPE_DELETION] = "Deletion";
}
public function getId($logType) { ... }
public function getLogType($id) { ... }
}
$request = $pdo->prepare('INSERT INTO logs SET idLogType = :idLogType, ...');
$request->execute(array('idLogType' => LogTypeValues::LOGTYPE_CREATION));
2. Solo con database?
------------ | logTypes | ------------ | id | | logType | ------------
<?php
$request = $pdo->prepare('INSERT INTO logs SET idLogType = 1, ...');
$request->execute(array());
3. Nella banca dati, ma anche con le costanti PHP?
------------ | logTypes | ------------ | id | | logType | ------------
class LogTypeValues {
const LOGTYPE_CREATION = 1;
const LOGTYPE_EDITION = 2;
const LOGTYPE_DELETION = 3;
}
Cosa ti cosa su questi 3 metodi?
Grazie per la risposta, ma attenzione, una tabella contenente i log potrebbe essere una delle più grandi tabelle del database e la memorizzazione di un varchar (1 byte + 1 byte/char) invece di tinyint (solo 1 byte) può essere un problema –