php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.05.2006, 11:07  
Erfahrener Benutzer
 
Registriert seit: 08.01.2006
Beiträge: 212
heohni
Standard Gute Struktur

Hi,

ich möchte mir eine kleine Länder Datenbank aufbauen und bin mir nicht ganz sicher was das setzen der richtigen Schlüssel angeht, damit ich später mal ohne Probleme alle Daten auslesen kann.

Bisher habe ich folgende Tabellen

CREATE TABLE `mi_continent` (
`continentId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`continentId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_country` (
`continentId` int(11) NOT NULL default '0',
`countryId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`countryId`),
UNIQUE KEY `index` (`continentId`,`countryId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `mi_region` (
`continentId` int(11) NOT NULL default '0',
`countryId` int(11) NOT NULL default '0',
`regionId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`regionId`),
KEY `index` (`continentId`,`countryId`,`regionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_province` (
`continentId` int(11) NOT NULL default '0',
`countryId` int(11) NOT NULL default '0',
`regionId` int(11) NOT NULL default '0',
`provinceId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`provinceId`),
KEY `index` (`continentId`,`countryId`,`regionId`,`provinceId` )
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_city` (
`continentId` int(11) NOT NULL default '0',
`countryId` int(11) NOT NULL default '0',
`regionId` int(11) NOT NULL default '0',
`provinceId` int(11) NOT NULL default '0',
`cityId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`cityId`),
KEY `index` (`continentId`,`countryId`,`regionId`,`provinceId` ,`cityId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Zu jeder dieser Tabellen habe ich jeweils eine weitere Tabelle, die die Namen (und später die Übersetzungen) enthält.

(LID = language ID)

CREATE TABLE `mi_continent_lang` (
`continentId` int(11) NOT NULL default '0',
`LID` int(11) default NULL,
`name` varchar(100) default NULL,
PRIMARY KEY (`continentId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_country_lang` (
`countryId` int(11) NOT NULL default '0',
`LID` int(11) default NULL,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`countryId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `mi_region_lang` (
`regionId` int(11) NOT NULL default '0',
`LID` int(11) default NULL,
`name` varchar(11) default NULL,
PRIMARY KEY (`regionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_province_lang` (
`provinceId` int(11) NOT NULL default '0',
`LID` int(11) default NULL,
`name` varchar(100) default NULL,
PRIMARY KEY (`provinceId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `mi_city_lang` (
`cityId` int(11) NOT NULL default '0',
`LID` int(11) default NULL,
`name` varchar(100) default NULL,
PRIMARY KEY (`cityId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Ist das gut so?
Oder würdet Ihr es anders strukturieren?

Freue mich auf Anregungen :wink:
heohni ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.05.2006, 11:14  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ich halte es für unnütz die ganzen IDs über alle Tabellen hinwegzuschleifen. zB
Code:
CREATE TABLE `mi_city` (
`continentId` int(11) NOT NULL default '0',
`countryId` int(11) NOT NULL default '0',
`regionId` int(11) NOT NULL default '0',
`provinceId` int(11) NOT NULL default '0',
`cityId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`cityId`),
KEY `index` (`continentId`,`countryId`,`regionId`,`provinceId`,`cityId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Die Zugehörigkeiten der provinceID zu einer bestimmten regionID und die dann wiederum zu einer bestimmten countryID und die dann wie zu einer continentID existiert doch bereits in den vorgehenden Tabellen. Soweit ich das sehe sind das redundante Daten... Zudem
Code:
CREATE TABLE `mi_continent` (
`continentId` int(11) NOT NULL auto_increment,
PRIMARY KEY (`continentId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Die Tabelle check ich garnicht... Da ist nur eine Spalte, wo ist da eine Beziehung zwischen Daten?
KingCrunch ist offline   Mit Zitat antworten
Alt 29.05.2006, 11:25  
Erfahrener Benutzer
 
Registriert seit: 08.01.2006
Beiträge: 212
heohni
Standard

Ok, das hiesse, ich beziehe mich in der Tabelle

country auf die contentId

region auf die countryId

province auf die regionId

city auf die provinceId?

Was mache ich, wenn ich mal einen Ort keine Province zuordnen kann?
In Deutschland z.B. gibt es so etwas nicht, in Spanien aber schon

In der continent kann ich ja nichts weiter eingeben, als die Id, der name dazu steht in der continent_lang.
heohni ist offline   Mit Zitat antworten
Alt 29.05.2006, 11:29  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Was mache ich, wenn ich mal einen Ort keine Province zuordnen kann?
In Deutschland z.B. gibt es so etwas nicht, in Spanien aber schon
Das Problem existiert bei deiner Datenstruktur auch Wenn das der Fall sein sollte, dann lässte die Spalte in der Zeile einfach leer oder setzte default (0 zB) (falls möglich) und verarbeitest es dann entsprechend im Script. Oder aber du erstellst gewissermaßen eine dummy-Provinz ("independent" ? ), mit der du alle auffängst, die sich keiner real-existierenden Provinz zuordnen lassen
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 29.05.2006, 11:36  
Erfahrener Benutzer
 
Registriert seit: 08.01.2006
Beiträge: 212
heohni
Standard

Zitat:
Zitat von KingCrunch
Das Problem existiert bei deiner Datenstruktur auch
Wie meinst Du das denn jetzt?
heohni ist offline   Mit Zitat antworten
Alt 29.05.2006, 11:42  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ich hab grad nochmal überlegt. Mit deiner Struktur hast du das Problem nicht, denn da kann man auch ohne Provinz Land und Kontinent zuordnen. Die Frage ist bloss, ob sich das so rentiert für eine handvolle Ortschaften gleich überall sämtliche IDs mitzuschleppen. Ich würd ne dummy-Provinz vorschlagen.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Macht diese Struktur Sinn? Ghosti Datenbanken 17 24.04.2008 08:24
xslt struktur.. so nur mit php-unterstützung möglich? Crypi PHP Tipps 2008 8 17.03.2008 17:58
Struktur im Newssystem tinchen PHP Tipps 2007 4 10.07.2007 21:20
endlich gute lösung für safe_mode probleme. viel spass. ;) Promaetheus PHP Tipps 2006 7 09.11.2006 17:45
die neue Struktur von der opengeodb Plague PHP-Fortgeschrittene 2 13.07.2006 08:33
DB Struktur? nsane Datenbanken 2 11.10.2005 10:50
Gute Tut lessiv HTML, Usability und Barrierefreiheit 0 05.08.2005 20:52
[Erledigt] Gute Werbung Off-Topic Diskussionen 13 01.04.2005 00:27
Forum Struktur der Tabelle?! PHP Tipps 2005 4 05.01.2005 15:01
verzeichnis struktur in eine tabelle packen Datenbanken 2 29.12.2004 20:15
ich suche gute tipps für ein skript ! Beitragsarchiv 3 02.09.2004 07:52
wer weiß wie man so ein struktur schreibt?? HTML, Usability und Barrierefreiheit 1 30.08.2004 10:50
SUCHE AUCH EINEN GUTE TOPSITESCRIPT !! Beitragsarchiv 6 26.07.2004 18:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
-g create table engine default, länderdatenbank php, gute struktur php seite, gute strukturierung tabellen, gute php struktur, gute struktur, gute struktur für ein forum, html gute struckturierung, engine=innodb default charset=latin1;, create innodb

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.