[SQL] Sicherstellen, dass es bei Tabelle genau nur eine Zeile gibt

topfklao

Christoph N.
ID: 118468
L
20 April 2006
885
17
Hi!!!

Ich hätte folgenden Wunsch an die Datenbank. Ich möchte sicherstellen, dass es von einer bestimmten Tabelle nur genau eine Zeile gibt. Grund: Diese Tabelle enthält Konfigurationsdaten, die natürlich nur einmal vorhanden sein sollten.:D

Kann man das auch auf Datenbankseite lösen? Oder ist man da auf sich selbst angewiesen?
 
Ich weiss jetzt nicht, wie mächtig Trigger in MYSQL sind, aber vielleicht gibt es eine Möglichkeit, damit einen COUNT(*) auf die Tabelle abzusetzen und wenn das Ergebnis <> 0 ist, den INSERT abzuweisen.

Andere Möglichkeit ist, eine zusätzliche Spalte in die Tabelle aufzunehmen, mittels Trigger diese Spalte einen konstanten Wert zuzuweisen und einen UNIQUE INDEX darüber zu legen.

Oder eine Spalte HIDDEN NOT NULL WITH DEFAULT('1') zu machen und darüber einen UNIQUE INDEX zu legen.


Aber genau eine Zeile wirst Du eh nie schaffen. Höchstens maximal eine. Weil anfangs enthält jede Tabelle Null Zeilen
 
Sorry, aber das klingt für mich eher nach 'nem falschen Konzept als nach einer vernünftigen Anforderung.

Was willst Du denn dann in dieser einen Zeile speichern? Ein serialisiertes Array in einer einzigen Spalte oder hat die Zeile dann X Spalten - für jede Konfigurationsmöglichkeit eine?
 
Das klingt als waerst du mit einem einfachen File besser beraten. Ich nehme mal an dass deine tabelle irgendwie so aussieht:

Code:
var1 | var2 | var3 | var4 | var5 | ...

Da ist eine DB definitiv fehl am Platze. Wie gesagt mach es lieber mit einem config file den du lesen und schreiben kannst, oder wenn du wirklich eine DB benutzen willst dann lieber so:
Code:
key | value
Mit key unique und primary. Dann kannst du einfach folgendes machen:

PHP:
$rs = mysql_query("SELECT key, value FROM db_config;");
$config = array();
while($t = mysql_fetch_assoc($rs)){
  $config['key'] = $value;
}

Danach haste die config genau gleich wie mit deinem system, nur eben um einiges flexibler (du musst nicht das tabellen Format anpassen solltest du merken dass du eine neue Config variable brauchst) und du kannst sogar das $config array vorpopulieren, um default werte zu haben und nur veraenderte Werte aus der DB auszulesen.

HTH,
Snyke
 
Was du suchst ist entweder das PRIMARY_KEY attribut oder aber das Restraints-Konzept. Welches von beiden ist aus deinem Post aber nicht ersichtlich.

Davon abgesehen halte ich es für arg unklug, die Config in einer relationalen DB zu speichern. Wenn überhaupt solltest du dir für sowas dokumentenorientierte Ansätze ansehen.