Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Mysql für Länder, Kontinent ...

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von samal, 13 Februar 2013.

  1. samal

    samal Neuer Benutzer

    Hallo

    Ich habe die folgenden MySQL-Codes. Ich will nur Kontinenten einfügen, dann Länder, die unter jedem Kontinent fallen und das Land gehörte zu den Städten mit ihrem name variants, parent division, latitude, longitude.


    Meine Frage ist, wie kann ich die Vorlage oder Verbindung zwischen den drei Tabellen zu bekommen? Wie ich schon sagte, zuerst: Unter Kontinents das gehörte Land die Städte.

    --
    -- Tabelle `default_mqps_continents`
    --

    CREATE TABLE IF NOT EXISTS `default_mqps_sources` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `slug` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `continent` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `description` tinytext COLLATE utf8_unicode_ci,
    `published` enum('yes','no') COLLATE utf8_unicode_ci DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `slug` (`slug`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


    --
    -- Tabelle `default_mqps_countries`
    --

    CREATE TABLE IF NOT EXISTS `default_mqps_sources` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `slug` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `country` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `description` tinytext COLLATE utf8_unicode_ci,
    `published` enum('yes','no') COLLATE utf8_unicode_ci DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `slug` (`slug`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


    --
    -- Tabelle `default_mqps_cities`
    --

    CREATE TABLE IF NOT EXISTS `default_mqps_sources` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `slug` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `city` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `name_variants` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `parent_division` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `latitude` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `longitude` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
    `description` tinytext COLLATE utf8_unicode_ci,
    `published` enum('yes','no') COLLATE utf8_unicode_ci DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `slug` (`slug`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;




    --
    -- Tabelle `default_mqps`
    --

    CREATE TABLE IF NOT EXISTS `default_mqps` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `title_id` int(11) NOT NULL DEFAULT '0',
    `continent_id` int(11) NOT NULL DEFAULT '0',
    `country_id` int(11) NOT NULL DEFAULT '0',
    `city_id` int(11) NOT NULL DEFAULT '0',
    `title` varchar(255) NOT NULL,
    `content` text NOT NULL,
    `published` enum('No','Yes') NOT NULL DEFAULT 'No',
    `order` int(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
     
  2. akretschmer

    akretschmer Datenbank-Guru



    MySQL, MyISAM, keine referentiellen Constraints, Lon/Lat - Werte als Text. Deine Frage kann man daher auch nur mit einem ? beantworten.


    Andreas
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Ach ja: 3 identische Tabellennamen. Hä?

    Andreas
     
  4. samal

    samal Neuer Benutzer

    gibt's irgendeine Antwort?
     
  5. ukulele

    ukulele Datenbank-Guru

    Du solltest dir das Prinzip von Fremdschlüsseln aneignen. In die Tabelle Länder kommt einer der auf Kontinente verweißt und in Städte kommt einer der auf die Ländertabelle zeigt. Was die technische Umsetzung der Referenzen angeht muss diese in der Anwendung erfolgen, da MyISAM das nicht selber kann.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Warum verwendet man heute noch MyISAM? Kann mir irgend jemand mal einen triftigen Grund nennen? Referrentielle Integrität können Datenbanken schon seit vielleicht 40-50 Jahren, die Technologie hinter MyISAM ist älter und auch schon so lange tot. Das zu verwenden ist faktisch Leichenschänderei.

    Code:
    test=# create table kontinente (id serial primary key, kontinent text);
    NOTICE:  CREATE TABLE will create implicit sequence "kontinente_id_seq" for serial column "kontinente.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "kontinente_pkey" for table "kontinente"
    CREATE TABLE
    test=*# create table laender (id serial primary key, kontinent int references kontinente, land text);
    NOTICE:  CREATE TABLE will create implicit sequence "laender_id_seq" for serial column "laender.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "laender_pkey" for table "laender"
    CREATE TABLE
    test=*# create table staedte (id serial primary key, land int references laender, stadt text, lon numeric, lan numeric);
    NOTICE:  CREATE TABLE will create implicit sequence "staedte_id_seq" for serial column "staedte.id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "staedte_pkey" for table "staedte"
    CREATE TABLE
    test=*#
    
    Simpel, trivial und effektiv. Wer MySQL bevorzug, nimmt einfach InnoDB.


    Andreas
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden