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

samal

Neuer Benutzer
Beiträge
2
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 ;
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.532
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` (

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


--
-- Tabelle `default_mqps_countries`
--

CREATE TABLE IF NOT EXISTS `default_mqps_sources` (

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


--
-- Tabelle `default_mqps_cities`
--

CREATE TABLE IF NOT EXISTS `default_mqps_sources` (

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;




--
-- Tabelle `default_mqps`
--

CREATE TABLE IF NOT EXISTS `default_mqps` (

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;



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


Andreas
 

ukulele

Datenbank-Guru
Beiträge
4.647
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.
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.532
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.

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
 
Oben