php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.03.2007, 22:59  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard Datenbank-Design

Hallo,

ich habe zwar schon ein paar Abfragen und dergleichen gemacht, aber jetzt will ich für ein Projekt eigene Tabellen erstellen.

Ich habe folgende Tabellen:

Tabelle family:
famID | regDate | lastname | street | land | zipcode | city | phone | fax | email

Tabelle familiy_member:
ID | famID | surname | sex | birthday

Bei beiden Tabellen sollte ID der Primärschlüssel werden bei Tabelle familiy_member ist famID der Fremdschlüssel, der sich auf die Tabelle family bezieht.

Ist das logisch richtig?
Und wie packe ich das in den "Create table"-Befehl?

Danke für eure Hilfe
maeck ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 21.03.2007, 23:51  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

<<Ist das logisch richtig? >>
kommt darauf an, was du programmieren willst.

<<Und wie packe ich das in den "Create table"-Befehl?>>
Wenn du nicht weiss, wie du es in Create table packen muss, dann wirst du auch nicht wissen, wie du deine Tabellen abfragen, ändern, löschen kannst. Und es hat kein Sinn ohne Grundlagen das anzufangen.
Grundlagen:
http://www.sql-und-xml.de/sql-tutorial/
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 22.03.2007, 00:03  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Was ich programmieren will, ist es einen Anmeldung für Familien. Diese will ich aufspalten, in die Tabelle family, wo "allgemeine" Infos der Familie drin stehen und family_member wo jede Person drin steht. Deswegen sollten die beiden eine Beziehung zueinander haben.

Meine Frage, wie ich das in den create-table Befehl packe, bezog sich auf die Frage nach dem Primärschlüssel und dem Fremdschlüssel.
Oder wie stelle ich eine Beziehung zwischen den beiden Tabellen her?

Danke für den Link, der bestimmt nicht schadet
maeck ist offline   Mit Zitat antworten
Alt 22.03.2007, 00:25  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

famid in familiy_member ist fremdschlussel von family.
nun muss dir klar sein, dass bei dieser Tabellenstruktur alle familien-mitglieder automatisch gleiche familiennamen haben, was in realem Leben nicht immer der Fall ist.
wird ein familienmitglid in haus neben an umziehen, oder bekommt ein eigener Telefonnumer, dann gibt es bei dieser Tabellenstruktur keine möglichkeit das zu spiegeln. Das selbe gilt natürlich für E-mail.

Also kann ich meine Aussage <<kommt darauf an, was du programmieren willst>> nur noch ein mal bestätigen.
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 22.03.2007, 11:02  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo Slava,

danke für den Hinweis.
Das famid fremdschlüssel ist, das ist mir klar, aber ich weiß nicht, wie ich die Tabelle anlege, sodass diese Beziehung herauskommt.

Ich habe jetzt folgendes:
Code:
CREATE TABLE `family` (
  `famid` int(4) NOT NULL auto_increment,
  ...
  PRIMARY KEY  (`famid`)
) TYPE=MyISAM ;
Code:
CREATE TABLE `family_member` (
  `id` int(4) NOT NULL auto_increment,
  `famid` int(4) NOT NULL,

  ...
  PRIMARY KEY  (`id`)
) TYPE=MyISAM ;
Ist das korrekt?

Aber wenn sich jetzt jemand anmeldet, was muss ich dann machen, dass in famid von `family` in den Datensatz von `family_member` gespeichert wird, damit die Zugehörigkeit stattfindet? Das ist meine eigentliche Frage Weil ich das mit dem Primär-/Fremdschlüssel anlegen noch nicht verstanden habe.
maeck ist offline   Mit Zitat antworten
Alt 22.03.2007, 11:22  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Im Standard-MySQL musst du Fremdschlüssel-Beziehungen selbst programmieren. Das heißt in deinem Fall muss die ID der Familie (famid) ermittelt werden und diese für das neu hinzuzufügende Familienmitglied (unter famid) eingetragen werden.
Zergling-new ist offline   Mit Zitat antworten
Alt 22.03.2007, 11:29  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Achso. Das heisst, es gibt keine real existierende Beziehung zwischen den Tabellen.
Ich muss also in PHP erst die Familientabelle beschreiben, dann die family.famid auslesen und dann die family_member Tabelle schreiben?
Das erscheint mir aufwendig, oder?

Ist es dann sinnvoller InnoDB zu verwenden, oder doch besser bei MyISAM bleiben und es so machen?
maeck ist offline   Mit Zitat antworten
Alt 22.03.2007, 13:32  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

ein Referentielle Integrität ist nur eine logische schiecht, die den Programmierer ein Denkzettel verpasst, dass die Tabellen zusammen hängen.
Das bedeutet zbs, dass du bei einem Relationalem Datenbank keine datensätze von family löschen kannst, so lange sie noch dazugehörige familiy_member haben(oder du schreibst ein paar regeln z.b.s ON DELETE CASCADE bei create table).
Das kann natürlich von InnoDb übernommen werden, aber man sagt, dass innoDb auch langsamer ist( von mir nicht getestet ).
Also du muss selbst entscheiden, ob du mit InnoDB bei create Table ein paar regeln einführst, oder du verpasst dir selbst ein Denkzettel und folgst den Regeln von Referentzielen Integrität, wie alle andere Programmierer, die mit Mysql3 angefangen haben.
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 22.03.2007, 15:12  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Okay, vielen Dank euch!! Ich denke ich werde mir den Denkzettel selbst verpassen

Nur noch eine praktische Frage:
Wenn ich den Datensatz in die Tabelle family schreibe, wie kann ich dann die famid auslesen, die für diesen Datensatz vergeben wurde, bevor ich diese dann dem Datensatz, der in die Tabelle family_member reinsoll mitgebe?

Gibts einen MySQL-Befehl, der den Stand der aktuellen ID ausgibt? Oder wie löst man das in der Praxis?
maeck ist offline   Mit Zitat antworten
Alt 22.03.2007, 15:18  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

wenn du die letzte ID meinst die eingetragen wurde gibt es das in PHP und MySQL

PHP => http://de3.php.net/manual/de/functio...-insert-id.php
MySQL => http://dev.mysql.com/doc/refman/5.0/...unique-id.html
M3g4Star 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
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
schribt nichts in die datenbank Cheesy92 PHP Tipps 2006 9 27.10.2006 14:03
Wann Datenbank öffnen/schließen tayke PHP Tipps 2006 10 24.05.2006 17:29
Verbindung zu einer Datenbank im LAN Datenbanken 11 25.09.2005 12:18
Mehrere Anwendungen eine Datenbank... Datenbanken 5 15.08.2005 11:22
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
[Erledigt] Seiten in PHP mit Datenbank PHP Tipps 2005-2 3 24.07.2005 09:07
Design Beitragsarchiv 26 04.06.2005 20:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
datenbankdesign myisam

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:04 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.