Datenbank für Geburtstage außerhalb der MySQL DATE Funktion speichern

F0rris

Mitglied
Hallo zusammen,

derzeit stehe ich vor einem Problem, zwischen Performance und Speichernutzung.

Konkret gesagt, ich will die Geburtsdaten von Autoren erfassen jedoch erstellt sich das ganze schwieriger als gedacht. Da z. B. nicht für alle Autoren ein genaues Datum gibt, wann diese geboren sind. Deswegen habe ich derzeit Mehrer Lösungsansätze jedoch kann ich mich nicht so wirklich für den passenden entscheiden.

Alles in eine Spalte schreiben, z. B. 20000120
SQL:
CREATE TABLE `date` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`date` INT(8) UNSIGNED ZEROFILL NOT NULL DEFAULT '0',
`christ` ENUM('TRUE','FALSE') NOT NULL DEFAULT 'FALSE,
PRIMARY KEY (`id`)) ENGINE=MyISAM CHARSET=utf8;

Jeden Teil, des Datums einzeln Speichern und einem ENUM-Feld, was einem zeigt, ob es v. Chr. ist oder nicht.
SQL:
CREATE  TABLE `date` (
  `id` INT(8)  NOT NULL AUTO_INCREMENT ,
  `date_day` INT(2) NULL ,
  `date_month` INT(2) NULL ,
  `date_year` INT(4) NULL ,
  `christ` ENUM('TRUE','FALSE') DEFAULT 'FALSE,
  PRIMARY KEY (`idnew_table`) );
bzw. das Jahr negativ setzten wenn es v. Chr. ist, umso ohne ein weiteres ENUM zu Sparen.
SQL:
CREATE  TABLE `date` (
  `id` INT(8)  NOT NULL AUTO_INCREMENT ,
  `date_day` INT(2) NULL ,
  `date_month` INT(2) NULL ,
  `date_year` INT(4) NULL ,
  PRIMARY KEY (`idnew_table`) );

Meine Idee war auch schon, es in einem anderen Datumsformat zu speichern, das Problem ist jedoch ab und an ist nur das Jahr angeben. Gut hier könnte ich es negativ speichern, doch wie weiße ich es dann zu, wenn v. Chr. ist? (Julianisches Datumsformat).
SQL:
CREATE  TABLE `date` (
  `id` INT(8)  NOT NULL AUTO_INCREMENT ,
  `date` INT(8) NULL ,
  PRIMARY KEY (`idnew_table`) );

Am Liebsten würde ich alles in eine Spalte Speichern, so wie beim 1. Lösungsansatz. Das Problem ist nur, ich kann die Werte nicht Negativ Speichern. Gerne würde ich auch bei INTbleiben, für Abfragen mit BETWEEN ...

Freu mich auf Tipps und Meinungen zu meinen Lösungen.

Lg F0rris
 
Hi,

du kannst doch den Datentyp BIGINT (signed) nutzen, dann hast du ca. 292.000 Jahre in beide Richtungen zur Verfügung, ob das Jahr bekannt ist, kannst du ja als TINYINT(1) speichern.

Gruß Kyôya Stefan
 
Zurück