Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Was wo in einer DB speichern?

  1. #1
    Registrierter Benutzer
    Registriert seit
    Sep 2003
    Ort
    Berlin
    Beiträge
    641

    Was wo in einer DB speichern?

    Hallo zusammen.

    Wenn ihr in einer Datenbank z.B. Kunden und Lieferanten speichern sollt: würdet ihr beide in einer Tabelle speichern (Kunde kann auch Lieferant sein) oder sollte man da lieber zwei Tabellen nehmen?

    Welche Gründe sprechen jeweils dafür?

    Thx

    Alex
    Winner of the annual Montgomery-Burns-Award(TM) for outstanding achievements in the field of excellence!

    www.ac-edv.de

  2. #2
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.545
    Hm, zwei Tabellen. In einer die Firmen (sowohl Kunde als auch Lieferant), und eine andere welche die einander zuordnet, also in etwa so:

    Code:
    company:
    id|name
    
    zuordnung:
    lieferantID,kundenID
    Gruß,
    Ace

    EDIT: Wenn nat. gewährleistet werden kann, dass es immer nur einen Lieferant pro Kunde ode rumgekehrt gibt, dann reicht eine Tabelle.

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  3. #3
    Registrierter Benutzer
    Registriert seit
    Sep 2003
    Ort
    Berlin
    Beiträge
    641
    Hm.

    Also bisher habe ich eine Tabelle.
    In etwa so:

    Kontakte:
    id | Name | etc, etc, etc | Kontaktart <-- Kontaktart ist z.B. 1 (Kunde) 2 (Lieferant) oder 3 (beides)

    Was hältst du davon?
    Winner of the annual Montgomery-Burns-Award(TM) for outstanding achievements in the field of excellence!

    www.ac-edv.de

  4. #4
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.545
    Na ja, wenn du keine Beziehungen zwischen den Kontakten modellieren willst, passt das schon, sofern man weiss wofür die Zahl bei Kontaktart steht.

    Gruß,
    Ace

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  5. #5
    Registrierter Benutzer
    Registriert seit
    Sep 2003
    Ort
    Berlin
    Beiträge
    641
    Zitat Zitat von AceTheFace
    Na ja, wenn du keine Beziehungen zwischen den Kontakten modellieren willst, passt das schon, sofern man weiss wofür die Zahl bei Kontaktart steht.

    Gruß,
    Ace
    Also die Kontakte sind sich gegenseitig total egal.
    So eine "Beziehungstabelle" könnte man ja noch nachrüsten.
    Vorerst soll die Tabelle nur Stammdaten enthalten. Also Name, Adresse, Telefon, etc...
    Ich frage mich dabei nur, ob es irgendeinen Sinn macht, in einer extra Tabelle Teile dieser Stammdaten abzulegen. Also eine Tabelle in der Alle Telefon und Faxnummer stehen und eine andere in der der Rest steht. Ansonsten habe ich ja eine grosse Tabelle mit evtl. 30 Spalten.

    Was tun???
    Winner of the annual Montgomery-Burns-Award(TM) for outstanding achievements in the field of excellence!

    www.ac-edv.de

  6. #6
    404 - Title not found Avatar von LKH
    Registriert seit
    Jun 1999
    Ort
    Jena
    Beiträge
    3.709
    Hi,

    wenn dich das Thema wirklich interessiert beschäftige dich mal mit der Normalisierung. Hier mal was zu lesen: http://www.itse-guide.de/artikel/25

    LKH
    freedom is just another word for nothing left to loose ...

  7. #7
    Registrierter Benutzer
    Registriert seit
    Sep 2003
    Ort
    Berlin
    Beiträge
    641
    Zitat Zitat von LKH
    Hi,

    wenn dich das Thema wirklich interessiert beschäftige dich mal mit der Normalisierung. Hier mal was zu lesen: http://www.itse-guide.de/artikel/25

    LKH
    Brrrr! Die Normalformen. Da war ich in Info sogar rel. gut drin!

    Aber ernsthaft:
    Wie weit sollte die Normalisierung gehen, wenn man von vielleicht mal 1000 Datensätzen ausgeht?
    Macht es da Sinn, die redundanten Daten (z.B. 500 Mal "Ort"=Berlin) auszulagern?
    Da wird doch der progammtechnische Aufwand grösser als der Nutzen.
    Ist die Belastung des Systems durch die zusätzlichen Abfragen größer als die Belastung bei Abfragen mit "breiteren" Ergebnissen?
    z.B. Select * from kunden; select * from Orte; select * from Vorwahlen
    ODER BESSER
    Select * from grosser_adressliste???

    Was ist da sinnvoller?
    Winner of the annual Montgomery-Burns-Award(TM) for outstanding achievements in the field of excellence!

    www.ac-edv.de

  8. #8
    Java Fanboy Avatar von comrad
    Registriert seit
    Mar 2001
    Ort
    Delmenhorst
    Beiträge
    4.052
    Zitat Zitat von AceTheFace
    ...sofern man weiss wofür die Zahl bei Kontaktart steht.
    naja, dafür macht man ja ne extra Tabelle.

  9. #9
    Linuxgeiler Mod Avatar von AceTheFace
    Registriert seit
    Mar 2003
    Ort
    Ulm
    Beiträge
    4.545
    Zitat Zitat von comrad
    naja, dafür macht man ja ne extra Tabelle.
    Richtig. Ich hatte auch mal ne DB-Vorlesung
    Aber bei ihm klang das so, als wäre das halt dann eine Tabelle und fertig. Deshalb nochmal die kleine Bemerkung von mir.

    Gruß,
    Ace

    openSUSE 10.3 @ AMD 64 3700+,A8N-SLI-Premium,1GB,256MB NVIDIA GeForce 7950GT
    Mac OS X Tiger @ MacBook, Intel Core Duo 2GHz, 2GB

    Last.FM - Profil | Blog


  10. #10
    Registrierter Benutzer
    Registriert seit
    Sep 2003
    Ort
    Berlin
    Beiträge
    641
    Ich ändere jetzt mal die Tabellenaufteilung wie folgt:

    - eine Kundentabelle die nur Namen und Beschreibung des Kontakts enthält.
    - eine Tabelle für die Anschriften. (mehrere können die gleiche Anschrift haben. Einer kann mehrere Anschriften haben.)
    - eine Tabelle für Kontenverbindungen
    - eine für Kommunikationsdaten (Telefon, etc...)

    Was haltet ihr davon?
    Winner of the annual Montgomery-Burns-Award(TM) for outstanding achievements in the field of excellence!

    www.ac-edv.de

  11. #11
    Alphageek
    Registriert seit
    Nov 2002
    Ort
    Berlin
    Beiträge
    1.122
    Ich habe die Idee der 3. Normalform mal für Adressen durchgestylt. Obwohl sich noch ein kleines Problem darin befindet (transitive Abhängigkeit in Bundesländer), müßte dieses SQL-Skript ungefähr das anlegen, was du willst.

    TME

    Edit: Damn, wie bekommt man denn hier einen Anhang ran? Ich poste es mal in Code-Tags.
    Code:
    DROP TABLE IF EXISTS `rel_personenadressen`;
    DROP TABLE IF EXISTS `rel_bankverbindung`;
    DROP TABLE IF EXISTS `tbl_bankleitzahlen`;
    DROP TABLE IF EXISTS `tbl_personen`;
    DROP TABLE IF EXISTS `rel_adressen`;
    DROP TABLE IF EXISTS `rel_plzorte`;
    DROP TABLE IF EXISTS `tbl_orte`;
    DROP TABLE IF EXISTS `tbl_kontonummern`;
    DROP TABLE IF EXISTS `tbl_titel`;
    DROP TABLE IF EXISTS `tbl_strassen`;
    DROP TABLE IF EXISTS `tbl_postleitzahlen`;
    DROP TABLE IF EXISTS `tbl_bundeslaender`;
    
    CREATE TABLE `tbl_bundeslaender` (
      `id_bundesland` int(10) unsigned NOT NULL auto_increment,
      `str_bundesland` char(63) NOT NULL default '',
      `str_abkuerzung` char(2) NOT NULL default '',
      PRIMARY KEY (`id_bundesland`)
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_postleitzahlen` (
      `id_plz` int(10) unsigned NOT NULL auto_increment,
      `int_postleitzahl` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_plz`)
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_strassen` (
      `id_strasse` int(10) unsigned NOT NULL auto_increment,
      `str_strassenname` char(255) NOT NULL default '',
      PRIMARY KEY  (`id_strasse`)
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_titel` (
      `id_titel` int(10) unsigned NOT NULL auto_increment,
      `str_titel` char(127) NOT NULL default '',
      PRIMARY KEY  (`id_titel`)
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_kontonummern` (
      `id_kontonummer` int(10) unsigned NOT NULL auto_increment,
      `int_kontonummer` bigint(20) unsigned NOT NULL default '0',
      PRIMARY KEY (`id_kontonummer`)
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_orte` (
      `id_ort` int(10) unsigned NOT NULL auto_increment,
      `id_bundesland` int(10) unsigned NOT NULL default '0',
      `str_ortsname` char(255) NOT NULL default '',
      PRIMARY KEY  (`id_ort`),
      KEY `idx_tbl_orte_id_bundesland` ( `id_bundesland` ),
      CONSTRAINT `idx_tbl_orte_id_bundesland` FOREIGN KEY ( `id_bundesland` ) REFERENCES `tbl_bundeslaender` ( `id_bundesland` ) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `rel_plzorte` (
      `id_plzort` int(10) unsigned NOT NULL auto_increment,
      `id_ort` int(10) unsigned NOT NULL default '0',
      `id_plz` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_plzort`),
      KEY `idx_rel_plzorte_id_plz` (`id_plz`),
      KEY `idx_rel_plzorte_id_ort` (`id_ort`),
      CONSTRAINT `idx_rel_plzorte_id_plz` FOREIGN KEY (`id_plz`) REFERENCES `tbl_postleitzahlen` (`id_plz`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `idx_rel_plzorte_id_ort` FOREIGN KEY (`id_ort`) REFERENCES `tbl_orte` (`id_ort`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `rel_adressen` (
      `id_adresse` int(10) unsigned NOT NULL auto_increment,
      `id_plzort` int(10) unsigned NOT NULL default '0',
      `id_strasse` int(10) unsigned NOT NULL default '0',
      `int_hausnummer` int(10) unsigned NOT NULL default '0',
      `str_hausnummernzusatz` char(31) default NULL,
      PRIMARY KEY  (`id_adresse`),
      KEY `idx_rel_adressen_id_strasse` (`id_strasse`),
      KEY `idx_rel_adressen_id_plzort` (`id_plzort`),
      CONSTRAINT `idx_rel_adressen_id_strasse` FOREIGN KEY (`id_strasse`) REFERENCES `tbl_strassen` (`id_strasse`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `idx_rel_adressen_id_plzort` FOREIGN KEY (`id_plzort`) REFERENCES `rel_plzorte` (`id_plzort`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_personen` (
      `id_person` int(10) unsigned NOT NULL auto_increment,
      `id_titel` int(10) unsigned default NULL,
      `int_geschlecht` int(10) unsigned default NULL,
      `str_vorname` char(127) default NULL,
      `str_nachname` char(127) default NULL,
      `int_geburtsdatum` bigint(20) unsigned default NULL,
      PRIMARY KEY  (`id_person`),
      KEY `idx_tbl_personen_id_titel` (`id_titel`),
      CONSTRAINT `idx_tbl_personen_id_titel` FOREIGN KEY (`id_titel`) REFERENCES `tbl_titel` (`id_titel`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `tbl_bankleitzahlen` (
      `id_bankleitzahl` int(10) unsigned NOT NULL auto_increment,
      `id_adresse` int(10) unsigned NOT NULL default '0',
      `int_bankleitzahl` bigint(20) unsigned NOT NULL default '0',
      PRIMARY KEY (`id_bankleitzahl`),
      KEY `idx_tbl_bankleitzahlen_id_adresse` (`id_adresse`),
      CONSTRAINT `idx_tbl_bankleitzahlen_id_adresse` FOREIGN KEY (`id_adresse`) REFERENCES `rel_adressen` (`id_adresse`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `rel_bankverbindungen` (
      `id_bankverbindung` int(10) unsigned NOT NULL auto_increment,
      `id_bankleitzahl` int(10) unsigned NOT NULL default '0',
      `id_kontonummer` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY (`id_bankverbindung`),
      KEY `idx_rel_bankverbindungen_id_bankleitzahl` (`id_bankleitzahl`),
      KEY `idx_rel_bankverbindungen_id_kontonummer` (`id_kontonummer`),
      CONSTRAINT `idx_rel_bankverbindungen_id_bankleitzahl` FOREIGN KEY (`id_bankleitzahl`) REFERENCES `tbl_bankleitzahlen` (`id_bankleitzahl`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `idx_rel_bankverbindungen_id_kontonummer` FOREIGN KEY (`id_kontonummer`) REFERENCES `tbl_kontonummern` (`id_kontonummer`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `rel_personenadressen` (
      `id_personadresse` int(10) unsigned NOT NULL auto_increment,
      `id_adresse` int(10) unsigned NOT NULL default '0',
      `id_person` int(10) unsigned NOT NULL default '0',
      `int_adressprioritaet` int(10) unsigned default NULL,
      PRIMARY KEY  (`id_personadresse`),
      KEY `idx_rel_personenadressen_id_person` (`id_person`),
      KEY `idx_rel_personenadressen_id_adresse` (`id_adresse`),
      CONSTRAINT `idx_rel_personenadressen_id_person` FOREIGN KEY (`id_person`) REFERENCES `tbl_personen` (`id_person`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `idx_rel_personenadressen_id_adresse` FOREIGN KEY (`id_adresse`) REFERENCES `rel_adressen` (`id_adresse`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    CREATE TABLE `rel_personenbankverbindungen` (
      `id_personbankverbindung` int(10) unsigned NOT NULL auto_increment,
      `id_person` int(10) unsigned NOT NULL default '0',
      `id_bankverbindung` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_personbankverbindung`),
      KEY `idx_rel_personenbankverbindungen_id_person` (`id_person`),
      KEY `idx_rel_personenbankverbindungen_id_bankverbindung` (`id_bankverbindung`),
      CONSTRAINT `idx_rel_personenbankverbindungen_id_person` FOREIGN KEY (`id_person`) REFERENCES `tbl_personen` (`id_person`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `idx_rel_personenbankverbindungen_id_bankverbindung` FOREIGN KEY (`id_bankverbindung`) REFERENCES `rel_bankverbindungen` (`id_bankverbindung`) ON DELETE CASCADE ON UPDATE CASCADE
    ) TYPE=InnoDB;
    
    BEGIN;
    
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Schleswig-Holstein",           "SH" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Freie und Hansestadt Hamburg", "HH" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Niedersachsen",                "NI"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Freie Hansestadt Bremen",      "HB"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Nordrhein-Westfalen",          "NW"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Hessen",                       "HE" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Rheinland-Pfalz",              "RP"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Baden-Württemberg",            "BW"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Freistaat Bayern",             "BY" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Saarland",                     "SL" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Berlin",                       "BE" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Brandenburg",                  "BB"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Mecklenburg-Vorpommern",       "MV" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Freistaat Sachsen",            "SN"  );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Sachsen-Anhalt",               "ST" );
    INSERT INTO `tbl_bundeslaender` ( `str_bundesland`, `str_abkuerzung` ) VALUES ( "Freistaat Thüringen",          "TH"  );
    
    COMMIT;
    Geändert von Thomas Engelke (16.12.05 um 12:46 Uhr)
    1 L Randal wrote a book, a 2 L Llama for the look,
    but the one we owe it all is the 3 L Larry Wall.
    Confucius: He who play in root, eventually kill tree.

Ähnliche Themen

  1. Bilder speichern bei Adobe Photoshop unter Linux
    Von surf_johnson im Forum Anwendungen Allgemein, Software
    Antworten: 2
    Letzter Beitrag: 11.08.05, 15:26
  2. Soffice kann geöffnete Dateien nicht mehr speichern; speichern unter geht; Suse updat
    Von einherjar im Forum System installieren und konfigurieren
    Antworten: 4
    Letzter Beitrag: 16.05.05, 15:59
  3. OpenOffice, kann nicht speichern!
    Von Janjin im Forum Anwendungen Allgemein, Software
    Antworten: 5
    Letzter Beitrag: 12.01.03, 14:05
  4. gta3 kann nicht speichern
    Von jeppo im Forum Emulatoren für Spiele
    Antworten: 6
    Letzter Beitrag: 18.06.02, 18:21
  5. Speichern in OO ==> Fehler
    Von mikomeko im Forum Anwendungen Allgemein, Software
    Antworten: 2
    Letzter Beitrag: 09.06.02, 09:50

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •