Was kommt nach dem Datenbankentwurf?

Liebe/-r Experte/-in,

ich habe mich über relationale Datenbanken informiert. Nachdem ich im Programm „MySQL Workbench“ eine Datenbank mit entsprechenden Verbindungen erstellt habe, frage ich nun, wie ich diese Informationen, also die Verbindung(1:n,n:m usw.) in meiner PHP-Programmierung nutze. Gibt es da ein entsprechendes Vorgehen oder ein Beispiel?

Habe ich etwa zwei Tabellen mit Namen kunde und gekauftes_Produkt, die wiederum aus den Einträgen kunde(id, kundenname) und gekauftes_Produkt(id,produktname,kundeid) bestehen als auch festgelegt, daß mit 1:n jeder Kunde aus der Datenbank kunde mehrere Produkte kaufen kann aber jedes Produkt nur von einem Kunden gekauft werden kann, wie wandle ich dann diese Informationen in die Programmierung um?

Dies war nur zur Veranschaulichung bitte in der Antwort auf die allgemeine Frage im ersten Absatz eingehen.

aus meiner sicht brauchst du drei tabellen

  1. die tabelle kunde (kunde_id,name, vorname, adresse usw.)
  2. tabelle produkte (produkt_id, bezeichnung, preis usw.)
  3. tabelle verkaeufe (verkauf_id, produkt_id,kunde_id, datum usw.)
    was immer du dann dir oder dem kunden zeigen willst, das kannst du alles aus diesen drei tabellen saugen.
    roland dreix
    dreix webdesign

Hallo Donatus,

also in PHP muß man natürlich die Abfragen programmieren, z.B. wie folgt - man erstellt z.B. ein Programm abruf.php (eine Datei mit diesem Namen und kopiert in diese Datei folgenden Inhalt, wobei die erte Zeile und letzte Zeile mit code in Klammern weg zu lassen ist! ):

<?php $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) { die('Verbindung schlug fehl: ' . mysql\_error()); } $sql = "SELECT \* "; $sql .= "FROM kunde "; $antwort = mysql\_query($link,$sql); if (!$antwort) { echo 'Fehler in Abfrage '.$mysql\_error($link); } foreach (mysql\_fetch\_assoc($antwort) as $row) { echo 'Kunden-ID:'.$row['id'].' '; echo 'Name.....:'.$row['kundenname'].' '; } ?\> Natürlich gibt es in php auch wieder 1000 Wege, die nach Rom führen und man kann es anders machen. Die obigen Zeilen dienen als Beispiel, wie man php und mysql verknüpfen kann. Viel Spaß weiterhin [1awww.com Internet-Service-Provider](http://www.1awww.com) Detlef Bracker > Liebe/-r Experte/-in, > > .... frage ich nun, wie > ich diese Informationen, also die Verbindung(1:n,n:m usw.) in > meiner PHP-Programmierung nutze. ....

Liebe/-r Experte/-in,

Habe ich etwa zwei Tabellen mit Namen kunde und
gekauftes_Produkt , die wiederum aus den Einträgen kunde(id,
kundenname) und gekauftes_Produkt(id,produktname,kundeid)
bestehen als auch festgelegt, daß mit 1:n jeder Kunde aus der
Datenbank kunde mehrere Produkte kaufen kann aber jedes
Produkt nur von einem Kunden gekauft werden kann, …

Neue Tabelle mit:

Tabellen_id, Kunden_id, Produkt_id, Bestell_id, Lieferschein_id, Kaufdatum, Lieferdatum, …

Das Kaufdatum (auch) hier, obwohl redundant, aber Du hast über Kauf(Bestell) und Lieferdatum eine schnelle Übersicht über Deine Lieferzeiten und auch eine gute Übersicht, welche Produkte „Schnelldreher“ sind.

„Dies war nur zur Veranschaulichung bitte in der Antwort auf die allgemeine Frage im ersten Absatz eingehen.“

hast du gelesen, oder?

„Dies war nur zur Veranschaulichung bitte in der Antwort auf
die allgemeine Frage im ersten Absatz eingehen.“

hast du gelesen, oder?

Auf diese Art und Weise kannst Du ALLE 1:n oder n:m- Beziehungen abbilden.

Hast Du jetzt nicht begriffen, oder?

Dein Ton ist inakzeptabel. Gemeldet.

Hast Du jetzt nicht begriffen, oder?

Dein Ton ist inakzeptabel. Gemeldet.

Hast Du jetzt nicht begriffen, oder?

Jetzt begreife ich erst den Irrsinn Deiner Frage …

> jeder Kunde aus der Datenbank kunde mehrere Produkte kaufen kann
> aber jedes Produkt nur von einem Kunden gekauft werden kann

Stelle Deine Frage bitte im Troll-Forum. Danke.

Ansonsten brauchst Du nur eine Produkt-Tabelle mit Spalte Kunden_id unique null

Aber - wer nicht richtig fragt bekommt die falschen Antworten.

> Kunden_id unique null

Kannst Du Dir auch sparen.
update produkt set kunden_id = 555 where pridukt_id = 536 and kunden_id is null.

Famous last words.

Hallo,
zwischen Kunde und Produkt besteht eine n:m-Beziehung, weil ein Kunde mehrere Produkte kaufen und ein Produkt von mehreren Kunden gekauft werden kann.
Wenn ich Dich richtig verstanden habe hast Du jetzt 4 Tabellen. Wenn dem so ist, wäre das eine zuviel. Du brauchst die Tabelle ‚kunde‘ und die Tabelle ‚produkt‘ und eine dritte Tabelle, nennen wir sie ‚gekauft‘. Diese Tabelle ‚gekauft‘ enthält mindestens 2 Felder: nämlich ‚kunde‘ und ‚produkt‘ in die die IDs des Kunden bzw. des Produktes geschrieben werden. Diese Tabelle ist dann Deine n:m-Beziehung.
In diese Tabelle kannst Du dann noch weitere Informationen zu dem Kauf ablegen, wie z.B. die Nummer der Rechnung, den Zeitpunkt der Bestellung usw.
Ich hoffe das hilft Dir weiter. Datenbankprogrammierung ist eine hohe Kunst und die Welt ist eine riesengroße n:m-Beziehung.

Hallo,
ist schon etwas her, dass ich MySQL WB benutzt habe. Meiner Erinnerung nach gibt’s kein Feature, um generisch Software-quellcode für bestimmte Sprachen, z.B. PHP, zu erstellen. Was du aus WB exportieren kannst, sind die CREATE-Befehle, um die DB auf einem MySQL Server anzulegen.
In PHP erstellst du Abfragen, die du dann mit Hilfe verschiedener, mysql-spezifischer Erweiterungen, absetzt.
Eine besondere Unterstützung für das Modell und die Relationen gibt’s in PHP nicht. Deine Abfragen müssen einfach richtig sein und zum Modell passen: Wenn du z.B. versuchst, in gekauftes_produkt einen Datensatz einzufügen mit einer kunde_id, die gar nicht existiert in kunde, _kann_ es einen Fehler geben. Der kommt aber nicht von PHP, sondern von MySQL. „Kann“ deswegen, weil die echte referentielle Integrität nur bei bestimmten MySQL Storage Engines (z.B. InnoDB) gewährleistet ist.

Hallo,

die Frage ist ja sehr allgemein und eher Grundlagenentwicklung. Ich kann aus meiner Erfahrung sagen, dass die Beziehungen aus MySQL nicht zwangsläufig in PHP gültig sind und quasi automatisch eingehalten werden. Wenn man in PHP die MySQL-Queries von Hand erstellt, dann muss man wissen wie die Datenbank aufgebaut ist und die dort herrschenden Regeln und Beziehungen diszipliniert einhalten.

Es gibt aber auch Lösungen die anders vorgehen. Es gibt Datenbank-Abstraktionsschichten (zB. Doctrine), die über einen „treiber“ den Zugriff auf die Datenbank zulassen unter Berücksichtigung solcher Beziehungen und Regeln. Dort aber müssen aber die MySQL streng durch das Framework erstellt und verwaltet werden, sonst weiß PHP schon wieder nicht welche Beziehungen gelten.

Für den Einstieg möchte ich aber empfehlen, mit handentwickeltem PHP vorzugehen und diszipliniert zu programmieren, Denkarbeit wird leider nicht abgenommen :wink:

Gruß

Alex

Hallo Donatus,
ich arbeite nicht so Theoretisch, sondern programmiere meine Ideen direkt in PHP bzw. SQL und probiere ob das Ergebnis stimmt. Ist vielleicht nicht besonders gut, aber, wenn das Ergebnis stimmt?!
Also: Ich bau erst die Tabelle Kunde auf und dann die Artikel. Dass ein Kunde alle Artikel kaufen kann, die noch nicht verkauft sind ist klar. Das „verkauft“ kann man feststellen wenn keine KundenId im Artikel eingetragen ist. Ich denke, dann ganz einfach, man muss nur die entsprechenden SQL-Befehle programmieren. Ein Modell kenne ich nicht, mag es aber vielleicht geben. Ich mag diese nur nicht. Und wenn ja, glaube ich nicht, dass die das machen was ich möchte?!
Ich hoffe, dass ich weiter helfen konnte.
Viele Grüße
Werner

hi,

1:n beziehung beide tabellen direkt verbinden
tabelle 1

  • id (spalte 1)
  • name (spalte 2)

    tabelle 2
  • id (spalte 1)
  • id_tabelle1 (spalte 2)//die id von tabelle 1
  • name (spalte 3)

n:m beziehung über eine zwischentabelle
tabelle 1

  • id (spalte 1)
  • name (spalte 2)

tabelle 2

  • id (spalte 1)
  • name (spalte 2)

tabelle 3 //zwischentabelle zur verknüpfung

  • id_tabelle1 (spalte 1)//die id von tabelle 1
  • id_tabelle2 (spalte 2)//die id von tabelle 2

cu
harald

Bitte beschreibe mit eigenen Worten, wie du meine Frage verstanden hast.

wie du daten in einer datenbank miteinander verbindest.

*******************************

Bitte beschreibe mit eigenen Worten, wie du meine Frage
verstanden hast.

Die Frage war, was dir der Datenbankentwurf nutzt, du Fremdschlüssel etc. verwendest, dich mit 1:n etc. beschäftigst, wenn du letztendlich alles nochmal neu in PHP programmieren mußt.

Anders gesagt, ich habe etwa in phpMyAdmin unter Struktur bei Index einen fk_* wobei * für die Verbindung zweier Werte steht in zwei Tabellen.

Doch in deiner Programmierung kommt das gar nicht vor. Du planst die Daten aufwendig mit einer Anwendung um dann bei der Programmierung wieder von Null anzufangen.

Es geht nicht darum, wie du Tabellen einbindest. Es geht darum, wie du dein mühsam erstelltes Datenbankkonzept in Workbench etwa auch mit PHP nutzt.

aus dem was du schreibst geht ist mir nicht klar, worauf du hinaus willst bzw. was du eigentlich wissen möchtest.
ich antworte/frage mal mal in den text hinein

Die Frage war, was dir der Datenbankentwurf nutzt, du
Fremdschlüssel etc. verwendest, dich mit 1:n etc.
beschäftigst, wenn du letztendlich alles nochmal neu in PHP
programmieren mußt.

was verstehst du unter datenbankentwurf?
der eigentliche datenbankentwurf ist ein theoretisches modell, welches dann auch konkret in eine datenbank implementiert werden muß. für die implementierung wird sql verwendet. mit welcher programmiersprache du die ausführung der implementierung durchführst hängt von deinen möglichkeiten ab, du kannst es in php machen, aber auch in java, c#, …

Anders gesagt, ich habe etwa in phpMyAdmin unter Struktur bei
Index einen fk_* wobei * für die Verbindung zweier Werte steht
in zwei Tabellen.

Doch in deiner Programmierung kommt das gar nicht vor. Du
planst die Daten aufwendig mit einer Anwendung um dann bei der
Programmierung wieder von Null anzufangen.

planung ist ein sehr wichtiger faktor, bevor man mit der umsetzung beginnt. einfach drauflos zuarbeiten geht zwar am anfang etwas schneller, aber dieser kleine vorteil ist mit der entwicklung eines projektes schnell dahin, da meistens im verlauf dann noch dies auftaucht, jenes nicht berücksichtigt wurde und man dann anfängt, dieses irgendwo in dem planlos begonnen projekt ‚reinzuqetschen‘. zum schluß kommen meistens irgendwelche kompromisslösungen raus und man hat zeitlich mehr arbeit damit.

Es geht nicht darum, wie du Tabellen einbindest. Es geht
darum, wie du dein mühsam erstelltes Datenbankkonzept in
Workbench etwa auch mit PHP nutzt.

ich schreibe sql-abfragen, oder nutze tools wie den oben erwähnten phpmyadmin.

Die Frage war, was der Datenbankentwurf nutzt, du
Fremdschlüssel etc. verwendest, dich mit 1:n etc.
beschäftigst, wenn du letztendlich alles nochmal neu in PHP
programmieren mußt.

was verstehst du unter datenbankentwurf?

Du estellst Tabellen. Dann erstellst du verbindungen 1:n etc… Dann exportierst du das als .sql. Diese importierst du auf deinem Server.

Anders gesagt, ich habe etwa in phpMyAdmin unter Struktur bei
Index einen fk_* wobei * für die Verbindung zweier Werte steht
in zwei Tabellen.

Doch in deiner Programmierung kommt das gar nicht vor. Du
planst die Daten aufwendig mit einer Anwendung um dann bei der
Programmierung wieder von Null anzufangen.

planung ist ein sehr wichtiger faktor, bevor man mit der
umsetzung beginnt. einfach drauflos zuarbeiten geht zwar am
anfang etwas schneller, aber dieser kleine vorteil ist mit der
entwicklung eines projektes schnell dahin, da meistens im
verlauf dann noch dies auftaucht, jenes nicht berücksichtigt
wurde und man dann anfängt, dieses irgendwo in dem planlos
begonnen projekt ‚reinzuqetschen‘. zum schluß kommen meistens
irgendwelche kompromisslösungen raus und man hat zeitlich mehr
arbeit damit.

Du scheinst mich absichtlich mißzuverstehen.

Es geht nicht darum, wie du Tabellen einbindest. Es geht
darum, wie du dein mühsam erstelltes Datenbankkonzept in
Workbench etwa auch mit PHP nutzt.

ich schreibe sql-abfragen, oder nutze tools wie den oben
erwähnten phpmyadmin.

Folgendes: Lies dir alle meine Beiträge hier nochmal in Ruhe durch und antworte dann. Ich habe mich klar ausgedrückt, dir scheint wesentliches entgangen zu sein.

Die Frage war, was der Datenbankentwurf nutzt, du
Fremdschlüssel etc. verwendest, dich mit 1:n etc.
beschäftigst, wenn du letztendlich alles nochmal neu in PHP
programmieren mußt.

was verstehst du unter datenbankentwurf?

Du estellst Tabellen.

auf einem blatt papier oder mit einer modellierungssoftware, ich verwende z.b. dia.
Dann erstellst du verbindungen 1:n etc…
die ergibt sich aus dem, wie ich die tabellen aufbaue

Dann exportierst du das als .sql.

dazu muß man jedoch erst mal das entsprechende sql-statement schreiben,welches in der sql-datei steht
Diese importierst du auf

deinem Server.

genau.
das ist eine möglichkeit.

Anders gesagt, ich habe etwa in phpMyAdmin unter Struktur bei
Index einen fk_* wobei * für die Verbindung zweier Werte steht
in zwei Tabellen.

Doch in deiner Programmierung kommt das gar nicht vor. Du
planst die Daten aufwendig mit einer Anwendung um dann bei der
Programmierung wieder von Null anzufangen.

planung ist ein sehr wichtiger faktor, bevor man mit der
umsetzung beginnt. einfach drauflos zuarbeiten geht zwar am
anfang etwas schneller, aber dieser kleine vorteil ist mit der
entwicklung eines projektes schnell dahin, da meistens im
verlauf dann noch dies auftaucht, jenes nicht berücksichtigt
wurde und man dann anfängt, dieses irgendwo in dem planlos
begonnen projekt ‚reinzuqetschen‘. zum schluß kommen meistens
irgendwelche kompromisslösungen raus und man hat zeitlich mehr
arbeit damit.

Du scheinst mich absichtlich mißzuverstehen.

eigentlich nicht, ansonsten würde ich mir die zeit nicht nehmen und dir antworten

Es geht nicht darum, wie du Tabellen einbindest. Es geht
darum, wie du dein mühsam erstelltes Datenbankkonzept in
Workbench etwa auch mit PHP nutzt.

ich schreibe sql-abfragen, oder nutze tools wie den oben
erwähnten phpmyadmin.

Folgendes: Lies dir alle meine Beiträge hier nochmal in Ruhe
durch und antworte dann. Ich habe mich klar ausgedrückt,

augenscheinlich wohl nicht
dir

scheint wesentliches entgangen zu sein.

dann formuliere deine frage doch einmal anders, vielleicht kann ich es dann entdecken. dann kann ich dir auch weiterhelfen, wenn ich weiß, was du eigentlich willst.