php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.08.2008, 12:11  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 9
Tomte befindet sich auf einem aufstrebenden Ast
Standard kleines DB Konzept

Hallo Gemeinde.

Ich habe da mal eine Frage an euch. Und zwar möchte ich eine DB (als Beispiel) erstellen, die, wie ich mir gedacht habe, aus zwei Tabellen hinhalten bestehen sollte.

Hintergund...ich möchte einen Namen und eine Zeit/Datum speichern. Da Zeit und Datum stündlich geschrieben werden und es ja eigentlich unsinnig, jedes mal dazu den Namen zu speichern. Daher wollte ich eine extra Namenstabelle anlegen und irgendwie über eine ID eine Relation herstellen.

Dachte da an sowas:
Namentabelle besitzt eine ID (Primary Key), ein Namensfeld (was ich Unique setzten würde) und zusätzlich eine AID (um auf die Zeit/Datum Tabelle zu zeigen).

Die Zeit/Datumstabelle hätte ebenfalls ein AID Feld, was der AID der Namenstabelle zum dazugehörigen Namen entspricht und ein DATE_TIME Feld für Zeit/Datum.

Bevor ich weitere Fragen stelle, wollte ich erstmal eure Meinung zum Konzept hören.

Vielen Dank
Tomte ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 22.08.2008, 12:23  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 993
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Die Idee der Normalisierung ist gut, aber du hast zu viele Daten in der Tabelle für den Namen. Wozu die AID speichern wenn du schon eine ID hast die das gleiche tut ^^

Mein vorschlag:
Code:
CREATE TABLE `names` ( 
    `id` mediumint(9) NOT NULL auto_increment, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB;

CREATE TABLE `times` ( 
    `id` mediumint(9) NOT NULL auto_increment, 
    `name` mediumint(9) NOT NULL, 
    PRIMARY KEY (`id`),
    KEY `name` (`name`)
) ENGINE=InnoDB 

ALTER TABLE `times` ADD CONSTRAINT 
    `times_ibfk_1` FOREIGN KEY (`name`) REFERENCES `names` (`id`) 
        ON DELETE CASCADE 
        ON UPDATE CASCADE;
__________________
Frank ist offline   Mit Zitat antworten
Alt 22.08.2008, 12:25  
there's only one psycho
 
Benutzerbild von PsychoEagle
 
Registriert seit: 21.08.2007
Beiträge: 1.283
PHP-Kenntnisse:
Anfänger
PsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer MenschPsychoEagle ist ein sehr geschätzer Mensch
PsychoEagle eine Nachricht über ICQ schicken PsychoEagle eine Nachricht über Skype™ schicken
Standard

Tach Einwohner

Wie wird das Datum bzw. die Zeit stündlich geschrieben? Wie ist das gemeint?

Würde es so machen:

namenstabelle (nid,name)
zeittabelle(nid,timestamp)

Name wie du sagtest UNIQUE und nid PRIMARY KEY und nid in zeittabelle ist dann FOREIGN KEY

Grüße
Das Psy
__________________
"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)
PsychoEagle ist offline   Mit Zitat antworten
Alt 22.08.2008, 12:25  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Hallo Tomte,

die AID in deiner Namenstabelle ist nicht nötig, dort hast du ja schließlich schon die ID.
Der Rest deines Ansatzes ist aber ok. In deiner Zeiten-Tabelle fügst du eine zusätzliche Spalte name_id (oder AID) ein die auf die Namenstabelle verweist.

Bei solchen Sachen ist es einfach immer wichtig sich kurz zu überlegen in welcher Beziehung die Dinge zueinander stehen. In deinem Fall gehört ein Eintrag in der Zeit-Tabelle immer zu genau einem Eintrag in der Namenstabelle. Ein Eintrag in der Namenstabelle kann beliebig viele "Zeiteinträge" haben. Also 1:N - und das löst man mit einem Fremdschlüssel (deiner "AID") in der Tabelle die immer zu genau einem anderen Datensatz gehört.
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 22.08.2008, 12:29  
KeinGrips
Gast
 
Beiträge: n/a
Standard

@agrajag ein zeiteintrag kann verschiedene namen haben. ein name kann verschiedene zeiten haben. also N:M
  Mit Zitat antworten
Alt 22.08.2008, 12:39  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von KeinGrips Beitrag anzeigen
@agrajag ein zeiteintrag kann verschiedene namen haben. ein name kann verschiedene zeiten haben. also N:M
Nö, ich lese aus der Beschreibung eindeutig ein 1:N raus: Ein Zeiteintrag gehört immer genau zu einem Namenseintrag, siehe: "und es ja eigentlich unsinnig, jedes mal dazu den Namen zu speichern".

Ansonsten hätte er natürlich nicht eine Spalte zuviel in seinem Ansatz sondern eine Tabelle zu wenig
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 22.08.2008, 12:47  
KeinGrips
Gast
 
Beiträge: n/a
Standard

ich würde es als N:M lösen. wozu den namen? dafür gibt es die id
es wäre halt nur eine dritte tabelle vorhanden mit id(name) und id(zeit). dabei muß aber die zeit konstant sein. wäre aber noch sauberer weil alles getrennt ist

hab gedacht das wort "ein name, eine zeit" seien nur als beispiel so^^

es ist halt mehr, was damit gemacht werden soll. und wieviele einträge kommen werden.
  Mit Zitat antworten
Alt 22.08.2008, 13:49  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 9
Tomte befindet sich auf einem aufstrebenden Ast
Standard

So....ich habe jetzt mal folgendes gemacht.....

Code:
   CREATE TABLE names (id INT NOT NULL PRIMARY KEY,
      -> name VARCHAR(20) UNIQUE
      -> ) ENGINE=INNODB;
Code:
   CREATE TABLE times ( id INT,
      -> FOREIGN KEY (id) REFERENCES names (id)
      -> ON DELETE CASCADE
      -> ) ENGINE=INNODB;
Das sollte doch soweit stimmen, oder ist da was dran falsch? Wie kann ich das jetzt am besten mal testen....wenn ich etwas in die names Tabelle schreibe, dann passiert in der times reichlich wenig.

Danke für eure Hilfe.
Tomte ist offline   Mit Zitat antworten
Alt 22.08.2008, 14:00  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

schreib vielleicht was in die times tabelle, mit einer ungültigen ID
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline   Mit Zitat antworten
Alt 22.08.2008, 14:09  
Neuer Benutzer
 
Registriert seit: 22.08.2008
Beiträge: 9
Tomte befindet sich auf einem aufstrebenden Ast
Standard

Okay...das hat schonmal funktioniert.

Wie mache ich das jetzt, wenn ich einen Namen geschrieben habe und ein Datum...die ID vom Namen setzt es ja allein (weil Primary Key und Auto Invrement). Wie stelle ich jetzt von der Zeit/Datum Tabelle die Verbindung zwsichen den ID's her?

Muss ich vor jedem Schreibvorgang prüfen, ob der Name schon existiert, wenn JA, dann lese die ID und benutze diese als ID für die Zeitentabelle?
Tomte 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
PHP und Javascript Pro für kleines CMS gesucht VitaminT Beitragsarchiv 0 26.06.2008 13:41
Kategorienamen manuell einfärben - kleines Problen noch cybermailer PHP-Fortgeschrittene 5 01.05.2008 20:56
kleines Problem mit css layer Rotti HTML, Usability und Barrierefreiheit 0 08.12.2005 22:36
Mein eigenes kleines Projekt PHP Tipps 2005-2 8 02.10.2005 22:12
kleines Problem beim Login[Erledigt] PHP Tipps 2005-2 4 19.09.2005 18:25
Konzept GFX-Community PHP Tipps 2005-2 2 22.08.2005 10:22
kleines Problem mit Script renzo PHP Tipps 2005-2 7 16.06.2005 09:11
[Erledigt] Kleines Validierungsproblem HTML, Usability und Barrierefreiheit 1 26.03.2005 19:20
Kleines Problem mit strip_tags PHP Tipps 2005 7 26.03.2005 00:27
[Erledigt] kleines Problem mit uploadskript ... PHP Tipps 2005 2 21.03.2005 22:12
Suche für mySQL alternatives Backend, kleines CMS ? PHP Tipps 2005 10 24.01.2005 12:11
kleines Problem mit >date< PHP Tipps 2004-2 4 11.12.2004 19:42
kleines Problem PHP Tipps 2004-2 2 05.12.2004 09:44
kleines Problem mit kleinem Rätsel PHP Tipps 2004 4 30.07.2004 18:34
Kleines Problem mit Upload-Script Pimbolie1979 PHP Tipps 2004 1 28.07.2004 11:53

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php konzept, namenstabelle, wofür primary foreign key, best of two konzept db

Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 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