Datenbank verwurschtelt mit Edit
SQL
Fehler:
Ich hab da was verwurschtelt mit dem foreign key. user_id war auf primary gesetzt und da konnt ich keine doppelten ids verwenden, da hab ich das gelöscht und jetzt kann ich nichts mehr in die tabelle shopping einfügen...
Ja das mit dem löschen war nix
Wie krieg ich das wieder hin? Mit den foreign key hab ichs net so, vorralem net in phpmyadmin
Edit:
Vielleicht frag ich mal anders, wie muss ich die Zusammenhänge bzw. Beziehungen setzten in MYSQL Workbench damit die Einträge in Tabelle User den Einträgen in Tabelle shopping zugeordnet werden. Die Spalte user_id soll die id des User entsprechen. Soll aber gleichzeitig auch mehrmals verwendet werden können also kein Unique.
Spoiler
![]()
MySQL-Abfrage(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 -- phpMyAdmin SQL Dump -- version 2.9.1.1-Debian-13 -- http://www.phpmyadmin.net -- -- Host: localhost -- Erstellungszeit: 08. Juli 2011 um 15:52 -- Server Version: 5.0.32 -- PHP-Version: 5.2.0-8+etch16 -- -- Datenbank: `wh24405sql5` -- -- -------------------------------------------------------- -- -- Tabellenstruktur für Tabelle `shopping` -- CREATE TABLE `shopping` ( `article` varchar(45) character set utf8 collate utf8_unicode_ci NOT NULL, `shop` varchar(45) character set utf8 collate utf8_unicode_ci default NULL, `date` date NOT NULL, `unit` int(2) default NULL, `unit_price` decimal(4,2) default NULL, `user_id` int(11) NOT NULL, KEY `fk_shopping_user` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Daten für Tabelle `shopping` -- -- -------------------------------------------------------- -- -- Tabellenstruktur für Tabelle `user` -- CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(45) collate utf8_unicode_ci default NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ; -- -- Daten für Tabelle `user` -- INSERT INTO `user` (`id`, `name`) VALUES (1, 'Andreas'), (3, 'Katrin'); -- -- Constraints der exportierten Tabellen -- -- -- Constraints der Tabelle `shopping` -- ALTER TABLE `shopping` ADD CONSTRAINT `fk_shopping_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Fehler:
Zitat
Cannot add or update a child row: a foreign key constraint fails (`wh24405sql5/shopping`, CONSTRAINT `fk_shopping_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Ich hab da was verwurschtelt mit dem foreign key. user_id war auf primary gesetzt und da konnt ich keine doppelten ids verwenden, da hab ich das gelöscht und jetzt kann ich nichts mehr in die tabelle shopping einfügen...
Ja das mit dem löschen war nix
Wie krieg ich das wieder hin? Mit den foreign key hab ichs net so, vorralem net in phpmyadminEdit:
Vielleicht frag ich mal anders, wie muss ich die Zusammenhänge bzw. Beziehungen setzten in MYSQL Workbench damit die Einträge in Tabelle User den Einträgen in Tabelle shopping zugeordnet werden. Die Spalte user_id soll die id des User entsprechen. Soll aber gleichzeitig auch mehrmals verwendet werden können also kein Unique.
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Josephine« (9. Juli 2011, 12:47)
du brauchst eine tabelle user , eine tabelle waren und eine tabelle shopping. die ware hat sowas wie beschreibung, preis, bild etc die tabelle shopping hat dann
user_id, item_id , eventuell datum wann gekauft und anzahl oder so.. aus user_id und item_id kannst du ein kombinierten primärschlüssel machen somit können mehrere user mehrere items kaufen
user_id, item_id , eventuell datum wann gekauft und anzahl oder so.. aus user_id und item_id kannst du ein kombinierten primärschlüssel machen somit können mehrere user mehrere items kaufen
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Hallo Josephine,
zu der letzten Frage.
du könntest den Namen vom CONSTRAINT weglassen,
MySQL würde dann einen eigenen Namen vergeben.
irgendwie beharkt sich das mit dem schon definiertem KEY in Zeile 26
also könnte man auch folgendes Statement vorher einfügen um das FK_shopping_user zu entfernen
2 zusätzliche Anmerkungen:
Gruß
Ego
zu der letzten Frage.
du könntest den Namen vom CONSTRAINT weglassen,
MySQL würde dann einen eigenen Namen vergeben.
|
|
MySQL-Abfrage(n) |
59 60 61 62 63 |
-- -- Constraints der Tabelle `shopping` -- ALTER TABLE shopping ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES `user` (id) ON DELETE NO ACTION ON UPDATE NO ACTION; |
irgendwie beharkt sich das mit dem schon definiertem KEY in Zeile 26
also könnte man auch folgendes Statement vorher einfügen um das FK_shopping_user zu entfernen
|
|
MySQL-Abfrage(n) |
61 |
ALTER TABLE shopping DROP INDEX fk_shopping_user ; |
2 zusätzliche Anmerkungen:
- ist das DEFAULT CHARSET=latin1 für die Tabelle shopping so gewollt?
- die Begriffe user, name und date sind Schlüsselwörter von MySQL,
wenn man Schlüsselwörter für Tabellen und Spalten verwendet und dann mal vergisst sie zu maskieren (also in eckige Anführungszeichen ` zu setzen) KANN das zu Fehlern führen ... und (jetzt kommt der Hauptgrund) das ganze sieht mit syntax highlighting komisch aus
Gruß
Ego
Ich hab da mal was erstellt im Workbench und wollte mal fragen ob das so Richtig ist: http://imageshack.us/photo/my-images/809/workbench.png/
Ich wollte noch sowas in der Art machen, das man bestimmte Waren zb. Zigaretten für bestimmte user rausrechnen kann. Dazu müsste ich doch dann wieder ne neue tabelle mit user_id und goods_id, name machen und die tabelle irgendwie goods_vip nennen oder so...
Ich wollte noch sowas in der Art machen, das man bestimmte Waren zb. Zigaretten für bestimmte user rausrechnen kann. Dazu müsste ich doch dann wieder ne neue tabelle mit user_id und goods_id, name machen und die tabelle irgendwie goods_vip nennen oder so...
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
hallo,
so wie ich das sehe hast Du den Vorschlag von CCCPMIKE umgesetzt, nur beim Preis gehst Du einen anderen Weg.
Ich glaube dafür solltest Du dir mal etwas zum Thema Normalisierung anlesen - nicht nur Wikipedia, das soll mehr der Erklärung des Begriffs dienen.
Zu der Frage ob das so richtig ist - keine Ahnung
Ich weis leider nicht was Du machen willst - wie sieht die Aufgabenstellung aus? was ist das Ziel?
Eventuell kannst Du das genauer ausführen, das es irgendwas mit ner Artikelverwaltung bzw Shopsystem werden soll sieht man ja an den Bezeichnungen,
aber wozu ist z.B der Wert shop VARCHAR(45) in Tabelle shopping?
Das Problem mit dem selektiven Warenangebot könnte man über das alter regeln
der User bekommt ein Alter und die Ware bekommt auch auch einen Alterswert ab dem es gekauft werden darf,
die Prüfung kann man bestimmt wieder mit CONSTRAINTS machen ...
bzw bei der anzeige im SELECT nur Waren anzeigen wo der Wert tabelle_Goods.aterswert kleinergleich dem Wert tabelle_User.alter ... usw usf
oder man gibt den Leuten und Waren einen Ansehen-Wert - Standing - und je nach dem wie das Benutzer-Ansehen ist darf er exklusivere Waren erwerben ... da wird sich schon was finden - wenn erstmal das Ziel definiert ist
Gruß
Ego
so wie ich das sehe hast Du den Vorschlag von CCCPMIKE umgesetzt, nur beim Preis gehst Du einen anderen Weg.
Ich glaube dafür solltest Du dir mal etwas zum Thema Normalisierung anlesen - nicht nur Wikipedia, das soll mehr der Erklärung des Begriffs dienen.
Zu der Frage ob das so richtig ist - keine Ahnung

Ich weis leider nicht was Du machen willst - wie sieht die Aufgabenstellung aus? was ist das Ziel?
Eventuell kannst Du das genauer ausführen, das es irgendwas mit ner Artikelverwaltung bzw Shopsystem werden soll sieht man ja an den Bezeichnungen,
aber wozu ist z.B der Wert shop VARCHAR(45) in Tabelle shopping?
Das Problem mit dem selektiven Warenangebot könnte man über das alter regeln
der User bekommt ein Alter und die Ware bekommt auch auch einen Alterswert ab dem es gekauft werden darf,
die Prüfung kann man bestimmt wieder mit CONSTRAINTS machen ...
bzw bei der anzeige im SELECT nur Waren anzeigen wo der Wert tabelle_Goods.aterswert kleinergleich dem Wert tabelle_User.alter ... usw usf
oder man gibt den Leuten und Waren einen Ansehen-Wert - Standing - und je nach dem wie das Benutzer-Ansehen ist darf er exklusivere Waren erwerben ... da wird sich schon was finden - wenn erstmal das Ziel definiert ist
Gruß
Ego
Naja Ziel ist es so eine Ausgabe zu machen:

Uploaded with ImageShack.us
Die Ausgabe funktoniert auch wunderbar, leider die Eingabe nicht mehr, ich werde mal deinen Vorschlag ausprobieren

Uploaded with ImageShack.us
Die Ausgabe funktoniert auch wunderbar, leider die Eingabe nicht mehr, ich werde mal deinen Vorschlag ausprobieren
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
so wie es aussieht geht das in Richtung Haushaltsbuch - dann ist es durchaus Sinnvoll den Unit-Preis in der Tabelle zu lassen wo er ist.
fragt sich aber- wie willst Du die besonderen Waren heraus rechnen?
wenn du z.B ein fixes Budget hast muss ja der Betrag irgendwo abgebucht werden.
außerdem ist rauchen doch ehh doof
fragt sich aber- wie willst Du die besonderen Waren heraus rechnen?
wenn du z.B ein fixes Budget hast muss ja der Betrag irgendwo abgebucht werden.
außerdem ist rauchen doch ehh doof
Ich hab die Datenbank zur Zeit so gestaltet:

Da ich später auch ein autocomplete machen will für die Artikel, die Shops hab ich mir gedacht könnte man ja auch schon anlegen und zum auswählen anbieten, so viel supermärkte gibt es ja in deutschland auch net. Was hälst du davon?

Da ich später auch ein autocomplete machen will für die Artikel, die Shops hab ich mir gedacht könnte man ja auch schon anlegen und zum auswählen anbieten, so viel supermärkte gibt es ja in deutschland auch net. Was hälst du davon?
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
also ein laden bestellt seine artikel, diese artikel werden von personen gekauft. das Artikel hat ein verkaufspreis. ich würde folgende tabellen anlegen:
markets
id | name | weitere daten
customer
id | name | budget usw..
goods
id | name | preis | weitere daten
dann kannste im mysql workbench eine n:m beziehung erstellen zwischen customer und goods und markets und goods dann kriegste automatisch generierte tabellen
customer_has_goods
customer_id | good_id
dann machste noch ein feld date und quantity zu customer_has_goods
und markets_has_goods
market_id | good_id
somit kannst du dann anhand des benutzers zurück verfolgen, was für sachen er eingekauft hat, wieviel es gekostet hat und wo er eingekauft hat
mit unterschiedlichen GROUP BY funktionen sowie SUM im SQL kannst du dann alles anpassen wie es dir passt. am besten alles im PhpMyAdmin antesten
MFG
markets
id | name | weitere daten
customer
id | name | budget usw..
goods
id | name | preis | weitere daten
dann kannste im mysql workbench eine n:m beziehung erstellen zwischen customer und goods und markets und goods dann kriegste automatisch generierte tabellen
customer_has_goods
customer_id | good_id
dann machste noch ein feld date und quantity zu customer_has_goods
und markets_has_goods
market_id | good_id
somit kannst du dann anhand des benutzers zurück verfolgen, was für sachen er eingekauft hat, wieviel es gekostet hat und wo er eingekauft hat
|
|
MySQL-Abfrage(n) |
1 2 3 4 5 6 7 |
SELECT g.name as good_name,g.preis as preis,g.quantity as anzahl,m.name as marketname FROM customer c,markets m, goods g,customer_has_goods cg, markets_has_goods mg WHERE c.id = cg.customer_id AND g.id = cg.good_id AND m.id = mg.market_id AND g.id = mg.good_id AND c.id = 1 |
mit unterschiedlichen GROUP BY funktionen sowie SUM im SQL kannst du dann alles anpassen wie es dir passt. am besten alles im PhpMyAdmin antesten
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Ähnliche Themen
-
FreeWebspace »-
Datenbank Problem
(31. Januar 2008, 23:37)
-
PHP »-
URL mit Variablen öffnen
(17. November 2005, 11:32)
-
Foren-, Blog- und Content-Managementsysteme »-
Installation von PhpBB2
(24. Februar 2003, 20:53)


