PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL und löschweitergabe??



Sellew
29-11-2001, 13:08
hi,

kleine frage, ich kenn von Access (muss ich leider von Arbeit aus kennen) und Oracle (nicht schlecht, aber teuer und groß) das die eine löschweitergabe und änderungsweitergabe haben.

nun die frage, kann das auch MySQL?? wenn ja, dann lieb ich es.

bin für jede antwort, tip, idee dankbar.

gruß

lolli
29-11-2001, 19:30
der begriff "löschweitergabe/änderungsweitergabe" ist mir ehrlich gesagt völlig fremd. vielleicht kannst du es kurz erklären. so besteht vielleicht eher die möglichkeit, das jemand mehr darüber weiss. unter umständen heisst dieses feature ja auch in mysql nur anders...

oliver

Sellew
29-11-2001, 19:50
gut ich versuchs.

2 tabellen:

1. tabelle:

id_firma
name
strasse
...

2. tabelle

id_firma
id_mitarbeiter
name
strasse
...

erklärung löschweitergabe:

die beziehung der beiden tabellen ist ja ersichtlich. also nehmen wir an, ich lösche in der 1. tabelle eine firma, dann wird bei oracle (so ich das eingestellt habe) in der 2. tabelle automatisch die mitarbeiter gelöscht.

erklärung änderungsweitergabe

nehmen wir an aus irgendeinem grund, ändert sich die id_firma in der 1. tabelle, dann werden auch alle id's in tabelle mit geändert.

sowas kann ich oracle machen lassen und muss nicht selbst dafür sorgen.

nun die frage, geht dies auch mit MySQL??

hoffe die erklärung ist logisch.

FaWeY
29-11-2001, 21:02
Es geht musste aber mit "Hand" machen
zb das du beiden einträgen in den tables die gleiche id zuordnest und wenn dann
die firma gekilled wird löscht er automatisch aus dem anderen table den mitarbeiter

mysql_query("delete from table1 where id1='$killid'");
mysql_query("delete from table2 where id2='$killid'");
echo mysql_error();

musst halt beim eintragen die werte richtig setzen viel spass

Sellew
29-11-2001, 22:02
@FaWeY

genau dies mach ich scon die ganze zeit. unter oracle bin ich gewohnt nur:

mysql_query("delete from table1 where id1='$killid'");

zu machen und in table2 löscht oracle selbst. auch access kann dies auch wenns von microdoof ist, aber dies vermiss ich bei mysql.

gut dies ist ein minibeispiel, da kann ich es verschmerzen.

aber ich hab zum beispiel ein projekt, da zieht sich die projekt_id durch 50 tables. wenn ich ein projekt lösche, hab ich kein bock 50 mal ein sql-statement abzuschicken. ausserdem könnte sowas wirklich der server übernehmen. wozu hat man den schließlich??

gruß.

lolli
30-11-2001, 10:18
das sehe ich ein. aber wie ist es zum beispiel, wenn du eben nur in einer tabelle diese daten löschen willst? dann verschwinden alle anderen auch? so ganz vernünftig ist das aber auch nicht!!! eher gefährlich.
wenn du ein programm oder skript baust, macht es ja eh nur einmal aufwand, diese tabellen festzulegen. nur bei der manuellen anpassung ist dann wohl viel schreibarbeit notwendig.... :)

oliver

Sellew
30-11-2001, 10:53
hi,

ähh ich seh das anders als du lolli. wenn ich etwas in der haupttabelle lösche, wozu sollte ich in den unteren tabellen die schlüssel mit den daten aufheben, wenn es den schlüssel in meiner z.b. projekttabelle nicht mehr gibt. sinnloser datenmüll. dazu ist eine löschweitergabe gut.

gut wie du schon sagst, ich kann es einmal schreiben und das script macht das schon. aber der verkehr zwischen client und server ist sinnlos hoch, wenn das DB-System dies von selbst erkennen würde. ich müsste in einem großen projekt 50 mal ein delete abschicken. das script dauert dann länger und der user wartet. wenn ich es einmal tue, verkürzt sich die wartezeit des users und der netzwerkverkehr minimiert sich.

meiner meinung nach, kann sowas echt der server übernehmen. wie seht ihr das?

gruß.

lolli
30-11-2001, 13:38
wenn die daten nur noch müll ergeben, ist es zweifellos günstiger, wennder server die entsprechenden beziehungen automatisch löscht.
(den fall den ich vor augen hatte ist aber so gedacht gewesen, das eben nicht die "oberste ebene" gelöscht wird, sondern eine der unteren....).
ansonsten kann ich die eigentlich nur recht geben: wenn ein referenzobjekt gelöscht wird, sollten alle anderen beziehungen geprüft auf konsistenz werden. so könnte man "versehentliche" versäumnisse vermeiden....

olli

Sellew
30-11-2001, 14:06
genau das mein ich ja, das die kinddaten automatisch gelöscht werden, wenn der elternteil gelöscht wird. sowas könnte wie gesagt der server übernehmen.

wie es scheint gibts das wohl net in mysql. :-((((((( *heul*

elrond
03-12-2001, 10:24
die mysql ab der version 4.1 soll zumindest trigger unterstützen (habe ich gelesen) damit könntest du solche dinge regeln...

wird aber wohl noch ein weilchen dauern :(

das problem ist, das mysql dafür viellecht nicht die richtige db ist. mysql ist optimal um schnelle abfragen zu realisieren ohne dabei den ganzen verwaltungsoverhead den transkationsverwaltung, referenzielle integrität usw. mit sich rumzuschleppen. vielleicht postgres ?

oder eine andere variante, die ich auch in einer applikation einsetze ist folgende. ich habe ein perlscript geschrieben, das zyklisch läuft und inkonsistenzen klärt (falls durch fehlerhaftes löschen welche auftreten sollten)

nordmann
05-12-2001, 10:55
Das ganze Thema bezieht sich doch eigentlich nicht auf sql abfragen sondern auf die einrichtung und erstellung der erforderlichen tabellen sowie die Beziehungen derer zueinander.
Leider unterstützt mysql diese beziehungen meines wissens nach noch nicht.
Lies mal unter:
http://www2.little-idiot.de/mysql/mysql-45.html
nach.
Alles klar?
eric