Chciałem wiedzieć, czy istnieje dobra praktyka w zakresie zarządzania wartościami. Na przykład mam logi tabeli bazy danych w następujący sposób:Lista wartości: Stałe kodowe lub baza danych?
--------------- | logs | |-------------| | id | | idLogType | | message | | date | ---------------
Moje pytanie jest o polu „idLogType”. Wiem, że wyliczenie nie jest dobrym sposobem na obsługę tego rodzaju pola, ponieważ jeśli chcę dodać nowe wartości, muszę ZMIENIĆ tabelę. Więc zamierzam stworzyć listę wartości.
Jakie jest Twoje zalecenie dotyczące obsługi listy wartości?
1. Tylko ze stałymi 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. Tylko z bazą danych?
------------ | logTypes | ------------ | id | | logType | ------------
<?php
$request = $pdo->prepare('INSERT INTO logs SET idLogType = 1, ...');
$request->execute(array());
3. W bazie danych, ale także ze stałych PHP?
------------ | logTypes | ------------ | id | | logType | ------------
class LogTypeValues {
const LOGTYPE_CREATION = 1;
const LOGTYPE_EDITION = 2;
const LOGTYPE_DELETION = 3;
}
Co prawda o tych 3 metod?
Dziękuję za odpowiedź, ale uważaj, tabela zawierająca dzienniki może być jedną z największych tabel bazy danych, a przechowywanie varchar (1 bajt + 1 bajt/znak) zamiast tinyint (tylko 1 bajt) może być problem –