mysqlstruktur verbessern

Dieses Thema im Forum "SQL und Datenbanken" wurde erstellt von lordlamer, 03.03.2005.

  1. #1 lordlamer, 03.03.2005
    lordlamer

    lordlamer Haudegen

    Dabei seit:
    15.05.2003
    Beiträge:
    703
    Zustimmungen:
    0
    Ort:
    hamburg
    hi!

    ich hab ne mysqldb struktur für mysql3. diese möchte ich nun auf mysql4 optimieren. das heisst eigentlich möchte ich referentielle intigrität mit einfügen. hab das schonmal probiert aber es hat leider net bei mir funktioniert. vielleicht kann mir ja jemand helfen. hier erstmal meine struktur:

    PHP:
    CREATE TABLE `content` (
      `
    idint(11NOT NULL auto_increment,
      `
    belongs_toint(11NOT NULL default '0',
      `
    contenttext NOT NULL,
      
    PRIMARY KEY  (`id`)
    );

    CREATE TABLE `files` (
      `
    idint(11NOT NULL auto_increment,
      `
    belongs_toint(11) default NULL,
      `
    fileblob,
      `
    filenamevarchar(255) default NULL,
      `
    filesizeint(11) default NULL,
      `
    filetypevarchar(255) default 'application/octet-stream',
      
    PRIMARY KEY  (`id`)
    );

    CREATE TABLE `tree` (
      `
    idint(11NOT NULL auto_increment,
      `
    belongs_toint(11NOT NULL default '0',
      `
    titlevarchar(255NOT NULL default '',
      `
    visibleint(1NOT NULL default '0',
      
    PRIMARY KEY  (`id`)
    );
    bei diesem dump handelt sich um eine baumstruktur die inhalte enthalten kann. und an den inhalten hängen vielleicht dateien.

    das heisst in der tabelle files enthält die spalte belongs_to die id aus der tabelle content. und die spalte belongs_to in der tabelle content enthält die id aus der tabelle tree. und in tree enthält die spalte belongs_to die id aus der selben tabelle.

    vielen dank schonmal

    mfg frank
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Foreign Key

    Das Stichwort lautet: foreign key
    Code:
    [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
        REFERENCES tbl_name (index_col_name, ...)
        [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
        [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
    
    ALSO:
    Code:
    alter table tree
    add foreign key FK_TREE_TREE  belongs_to references tree.id
    on delete restrict
    on update set null;
    
    alter table content
    add foreign key FK_CONTENT_TREE  belongs_to references tree.id
    on delete restrict
    on update restrict;
    
    alter table files
    add foreign key FK_FILES_CONTENT  belongs_to references content.id
    on delete restrict
    on update restrict;
    on XXX cascade heißt: Gibt es den Wert nicht, so wird er eingetragen.
    on XXX restrict heißt: Insert klappt nur, wenn der Wert vorhanden ist.

    Beim Tree hat man halt das Problem, dass das Root-Element keinen Vorgänger hat.
    Da musste kucken was besser passt. Aber ich denke mit "SET NULL" biste gut bedient.

    Die anderen Werte dürften ja selbsterklärend sein.

    Ich hoffe ich konnte helfen.
    Hier findest du alles http://dev.mysql.com/doc/mysql/de
     
  4. #3 lordlamer, 03.03.2005
    lordlamer

    lordlamer Haudegen

    Dabei seit:
    15.05.2003
    Beiträge:
    703
    Zustimmungen:
    0
    Ort:
    hamburg
    hi!

    danke erstmal!

    hab aber noch paar fragen bzw verständnisprobleme.

    läuft das mit mysql 4.0.x ?

    bei mir kann ich deine sqlstatements nicht 1 zu 1 übernehmen. bekomme folgenden fehler:
    Code:
    You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'belongs_to REFERENCES tree.id ON  DELETE  RESTRICT  ON  UPDATE 
    
    so und dann noch mein verständnisproblem. undzwar versteh ich den teil mit "foreign key FK_CONTENT_TREE belongs_to" nicht. also das FK_CONTENT_TREE zb. hab da die mysqldoku auch noch net so ganz verstanden.

    mfg frank
     
  5. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Erklärungsversuch

    "foreign key FK_CONTENT_TREE belongs_to"
    Ist halt einfach so. Das ist eben die Syntax.

    Du veränderst eine Tabelle und hängst an eine (oder mehrere Spalten) einen Fremdschlüssel welcher widerrum auf eine (oder mehrere Spalten) einer Tabelle zeigt.
    Dann legst du noch fest wie dieser Fremdschlüssel bei Nichtvorhandensein des Wertes auf den er verweißt handeln soll.
    Soll er "restrict" sein und sich brutal weigern?
    Soll er "cascade" sein und einfach den fehlenden Schlüssel eintragen.

    Also
    Code:
    [color=green]alter table tree[/color]
    [color=red]# hier gibt's noch keine Probleme[/color]
    [color=green]add foreign key FK_TREE_TREE[/color]
    [color=red]# erstelle einen Fremdschlüssel mit Namen "FK_TREE_TREE"[/color]
    [color=green]belongs_to[/color]
    [color=red]# von welcher Spalte aus [/color]
    [color=green]references tree.id[/color]
    [color=red]# auf welche zeigt der Fremdschlüssel [/color]
    [color=green]on update restrict on delete restrict[/color]
    [color=red]# wie verhält er sich[/color]

    Aber "cascade" löscht auch den Schlüssel wenn der Eintrag gelöscht wird.
    Darum würde ich "on delete cascade" nur wohlüberlegt einsetzen.
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

mysqlstruktur verbessern

Die Seite wird geladen...

mysqlstruktur verbessern - Ähnliche Themen

  1. Plasma 5.5 soll Wayland-Integration verbessern

    Plasma 5.5 soll Wayland-Integration verbessern: Tests mit einem funktionsfähigen Dsiplay-Server Wayland sollen mit Plasma 5.5 möglich sein, so der KWin-Entwickler Martin Gräßlin vor wenigen...
  2. FSF und Debian verbessern Datenbank für Hardware, die freie Software unterstützt

    FSF und Debian verbessern Datenbank für Hardware, die freie Software unterstützt: Die Free Software Foundation und die Linux-Distribution Debian wollen gemeinsam eine Datenbank ausbauen, die Anwendern freier Software Tipps gibt,...
  3. Valve will 3D-Geschwindigkeit von Mesa verbessern

    Valve will 3D-Geschwindigkeit von Mesa verbessern: Der Spiele-Hersteller Valve finanziert Arbeiten, die die Geschwindigkeit der freien OpenGL-Implementation Mesa deutlich erhöhen soll. Weiterlesen...
  4. Ubuntu will Suche in Unity verbessern

    Ubuntu will Suche in Unity verbessern: Ubuntu 13.04 soll mit einer erweiterten Suchfunktion in der Übersichtsseite von Unity aufwarten. Dadurch sollen die Suchmöglichkeiten und die...
  5. Mozilla will Firefox-Prozesse verbessern

    Mozilla will Firefox-Prozesse verbessern: Es bleibt bis auf weiteres bei den schnellen Veröffentlichungszyklen und den Versionsnummern von Firefox. Wie Mitchell Baker erklärte, will...