Hallo,
ich habe da noch 2 offene Punkte, welche ich gerne gelöst hätte, aber ich das alleine sicherlich nicht hin bekomme. Rein nach Bedarf will ich den mir wichtigeren hier zuerst anführen.
Als Bild die aktuelle Struktur der DB, die unter großer Mithilfe aus diesem Forum entstanden ist (bild1). In bild2 sind die für das Feature benötigte Tabellen sichtbar.
Folgendes soll erreicht werden. Die Tabelle tblSerien beinhaltet Serien von Verlagen, das sind also spezifische Inhalte. In der tblSerien sind diese mit dem Feld VerlagID_F fest zugeordnet. Hier der SQL Query des Feldes Serie (Kombifeld mit Abhängigkeiten) im Haupterfassungsformular, dem die Abfrage sel_Serie zugrunde liegt.
SELECT tblSerien.SerieID, tblSerien.Serie
FROM tblSerien
WHERE (((tblSerien.VerlagID_F)=[Formulare]![frmErfassung]![cboIDVerlag]))
ORDER BY tblSerien.SerieID;
Jetzt benötige ich allerdings eine Serie, welche alle Verlage haben bzw. zur Verfügung steht. Ich bezeichne sie einfach mal als Dummy-Serie.
Aktuell ist es ja so, dass wenn ein Spiel angelegt und einem Verlag zugeordnet wird, dann stehen mir eben nur noch die Verlags spezifischen Serien zur Verfügung, was ja i.O. und auch gewollt ist. Ich habe gesehen bzw. gelesen, dass man so etwas nur mit einer sogenannten Zwischentabellen lösen kann/muss. Ist dies "relativ" einfach zu lösen oder ist es eher mit viel Aufwand verbunden. Für eure Hilfe wäre ich dankbar.
Gruß Andreas
Hallo,
das Feld VerlagID_F in der Tabelle tblSerien ist falsch.
Denn SerieID ist Primärschlüssel und kann nur 1x vergeben werden, ergo kann so jeweil eine Serie nur von einem Verlag aufgelegt werden.
Was die Lösung an sich angeht, kann ich leider nicht weiterhelfen.
Gruß Andreas
Hallo Andreas,
warum kann denn die Serie nicht einfach leer bleiben, wenn es keine Zuordnung gibt?
Das wäre mAn doch die einfachste Lösung.
BTW:
Fremdschlüssel die keine Pflichtfelder sind, dürfen in Tabelle und Formular keinen Eintrag beim Standardwert haben.
Hallo,
z.B. man hat 5 Serien und 3 Verlage als MiniBeispiel.
Dann könnte die Tabelle tblSerien so aussehen:
1, Serie1, 1
2, Serie2, 1
3, Serie3, 1
4, Serie4, 1
5, Serie5, 1
also Verlag 1 legt alle Serien 1 - 5 auf.
Aber, wo bleiben die anderen Verlage? Ich kann ja keine Datensätze anfügen da ich nur 5 Serien habe?
Jeder weitere Datensatz bedeutet eine SerienID die es gar nicht gibt:
6, Serie1, 2
Also muss das Feld VerlagID_F aus der Tabelle tblSerien raus, es ist unnötig da eine Zuordnung über tblSpiele vorhanden ist.
Gruß Andreas
Hi Andreas,
Zitat von: Hondo am Januar 23, 2016, 22:32:40
das Feld VerlagID_F in der Tabelle tblSerien ist falsch.
Denn SerieID ist Primärschlüssel und kann nur 1x vergeben werden, ergo kann so jeweil eine Serie nur von einem Verlag aufgelegt werden.
Falsch klingt immer gleich so hart , ist aber in meinem Fall "jetzt" richtig. Bis der Bedarf des jetzigen Features aufkam, war es schon richtig. Nur aktuell verhindert es eben diese Erweiterung. Aus der Sicht ist deine Meinung deshalb korrekt.
Gruß Andreas
Hi Maggie,
Zitat von: MaggieMay am Januar 24, 2016, 00:08:41
warum kann denn die Serie nicht einfach leer bleiben, wenn es keine Zuordnung gibt?
Das wäre mAn doch die einfachste Lösung.
Selbstverständlich ist das die einfachste Lösung. Fakt ist aber auch, dass man aber auch der Meinung sein könnte, es wurde vergessen das einzutragen. Dies ist dann besonders der Fall, wenn man sich in Sammlungen nicht so gut auskennt, praktisch Anfänger ist. Von daher wäre die Lösung mit einem festen Eintrag anzustreben.
ZitatBTW:
Fremdschlüssel die keine Pflichtfelder sind, dürfen in Tabelle und Formular keinen Eintrag beim Standardwert haben.
Ich denke mal, du beziehst dich damit auf meine Aussage, dass die Serieneinträge mit dem Feld VerlagID_F fest zugeordnet sind. Entweder ich verstehe es jetzt gerade nicht richtig, weil wenn ich eine Serie in der Vergangenheit direkt in der tblSerie angelegt habe, dann habe ich sehr wohl auch immer im Feld VerlagID_F den Verlag eingetragen. Es passiert eben nichts anderes als wenn ich es über das frmVerlagSerie mache. Oder beziehst du dich mit deiner Aussage auf etwas anderes?
Gruß Andreas
Hi Andreas,
Zitat von: Hondo am Januar 24, 2016, 08:42:26
also Verlag 1 legt alle Serien 1 - 5 auf.
Aber, wo bleiben die anderen Verlage? Ich kann ja keine Datensätze anfügen da ich nur 5 Serien habe?
Jeder weitere Datensatz bedeutet eine SerienID die es gar nicht gibt:
6, Serie1, 2
Also muss das Feld VerlagID_F aus der Tabelle tblSerien raus, es ist unnötig da eine Zuordnung über tblSpiele vorhanden ist.
Hier mal in bild1 wie das in der tblSerie aussieht. Wenn ich das Feld VerlagID_F entferne, dann geht da gar nichts mehr, die Serien stehen nicht mehr zur Verfügung. Es ist ja auch im SQL definiert. Entferne ich das Feld, ist erst mal Schicht im Schacht.
SELECT tblSerien.SerieID, tblSerien.Serie
FROM tblSerien
WHERE (((tblSerien.VerlagID_F)=[Formulare]![frmErfassung]![cboIDVerlag]))
ORDER BY tblSerien.SerieID;Aus der Warte heraus kann ich deine Aussage erst einmal noch nicht nachvollziehen, sorry. Natürlich muss ich auch dazusagen, dass ich nicht die Erfahrung wir habe und da sicherlich mit der Nase auf das offensichtlich gestoßen werden muss :(.
Gruß Andreas
Und was schreibst du in die Tabelle wenn der Verlag Nr. 10 die Serie 141 auflegt?
Merkst du nicht selbst dass das kein Sinn macht?
Tabelle Serie ist doch mit Tabelle Spiele und Tabelle Verlage 1:n:1 verbunden. (n zu m über Zwischentabelle)
Das bedeutet dass 1 Verlag n Serien auflegen kann, und dass 1 Serie von m Verlagen aufgelegt werden kann
Und dieser Zusammenhang wird in der Zwischentabelle tblSpiele abgebildet, was m.E. ein schlechter Name ist. Die Tabelle sollte eigentlich tblSerienVerlage heißen, weil das die Verbindung wiedergibt.
Gruß Andreas
Hallo Andreas,
vielleicht sollte ich dir die Info noch geben, dass es feste Zuordnungen der Serien gibt, die keiner Änderungen mehr unterliegen! Wir reden von Zeiträumen von n --> 1990. In diesem Zeitraum gab es keine Serien Überschneidungen, es gab nur eindeutige Serien und zwar Verlagbezogen! Es ist daher völlig unnötig darüber zu philosophieren, mit was wäre wenn!
Die einzige Ausnahme ist jetzt eben, welche ich geschildert habe. Ich will eben bei allen Verlagen einen Eintrag bzw. eine Dummy_Serie, welche da z.B. "Keiner Serie zugeordnet" heißt. Ich weiß, dass das aktuell funktionale DB-Konstrukt dies nicht hergibt.
Ich habe ja erwähnt, dass wenn ich aus der tblSerie den FS VerlagID_F entferne, keinerlei Auswahlmöglichkeit mehr besteht. Das entfernen des FS geht sicherlich auch, dazu muss ich dann wohl den SQL Query der Abfrage sel_Serie abändern. Dazu kenne ich mich aber nicht gut genug aus um dies richtig zu korrigieren. Das ist dann aber wohl auch der Hintergrund, warum ich hier die Frage gestellt habe.
Über die Namenskonvention der Tabelle selbst kann man sicherlich episch diskutieren, aber machte bei der Gesamtsicht der DB den meisten Sinn.
Gruß Andreas
Hallo,
wenn ich mich mal wieder einmischen darf.
Ich bin etwas irritiert, denn wenn ich mich recht erinnere, hatten wir dieses Problem schon mal ganz am Anfang der Entwicklung. In der Version 9 war auch die Beziehung ganz anders. Da war das eine n:m Beziehung zwischen Verlag und Serie. Siehe Bild.
Und ich meine, wir hätten damals auch extra eien Datensatz bei Verlag eingefügt, wenn es keinen Verlag zur Serie gibt.
Kannst Du das mal prüfen.
Hi Klaus,
du darfst dich immer einmischen, weisst du doch ;D. Ja, das war in 0.9x schon so dabei. Wenn ich ehrlich bin, ist dies in den vielen Umbauten wohl still und leise abhanden gekommen.
Im Prinzip ist das ja mit einer Zwischentabellen so gelöst wenn ich das Bild der Beziehungen anschaue. Ich habe mir es in der alten 0.9.9 gerade mal angeschaut. Hmmm
Die Frage ist dann wohl, wie groß der Aufwand einer Nacharbeit ist und ob es relativ "lautlos" in dem aktuellen Konstrukt untergebracht werden kann.
Gruß Andreas
Hallo,
ich habe mal umgebaut. Hier wie die aktuelle Beziehungen der DB jetzt aussehen, bild1 im Anhang.
Ich habe die Querys angepasst, aber ich bekomme keine Datensätze angezeigt :(. Im Erfassungsformular habe ich dem Kombifeld das Steuerelment zugewiesen. Die Abfrage für das Feld habe ich angepasst, dazu der SQL-Code der Abfrage.
SELECT tblSerieVerlag.SerieVerlagID, tblSerieVerlag.SerieID_F, tblSerien.Serie
FROM tblSerien INNER JOIN tblSerieVerlag ON tblSerien.SerieID = tblSerieVerlag.SerieID_F
WHERE (((tblSerieVerlag.VerlagID_F)=[Formulare]![frmErfassung]![cboIDVerlag]))
ORDER BY tblSerien.Serie;
Weiterhin sehe ich noch, dass das Feld SerieID_F der tblSerieVerlag leer ist. Die tblSerieVerlag hat ja aktuell das PK Feld SerieVerlagID und die Felder mit FK VerlagID_F und SerieID_F. Die Felder SerieID_F ist aber wie gesagt noch leer, was erklärt, warum ich nichts angezeigt bekomme. Wie bewerkstellige ich es, damit er die aktuellen Daten aus der tblSerien übernimmt? Wohl mit einer Abfrage.
Ich habe hier auch eine Abfrage, aber da bekomme ich es nicht hin, den SQL Query korrekt umzubauen, sodass er die Datenübernahme machen würde :(. Diese Aktualisierungsabfrage sieht aktuell so aus:
UPDATE tblSerien INNER JOIN tblSerieVerlag ON tblSerien.SerieID = tblSerieVerlag.SerieID_F SET tblSerien.VerlagID_F = [tblSerieVerlag].[VerlagID_F];
Ich habe die dann mal umgebaut, aber er sagt 0 Datensätze sind zu aktualisieren :(.
UPDATE tblSerieVerlag INNER JOIN tblSerien ON tblSerieVerlag.SerieID_F = tblSerien.SerieID SET tblSerieVerlag.SerieID_F = [tblSerien].[SerieID];
Kann mich da jemand unterstützen und eventuell auch die Aussage treffen, woran es noch liegt, dass aktuell nichts angezeigt wird?
Gruß Andreas
Hallo Andreas,
Zitat von: derilzemer am Januar 24, 2016, 11:50:29Selbstverständlich ist das die einfachste Lösung. Fakt ist aber auch, dass man aber auch der Meinung sein könnte, es wurde vergessen das einzutragen.
das ließe sich doch durch eine Plausibilitätsprüfung vor der Speicherung in Verbindung mit entsprechenden Rückfragen lösen.
ZitatFremdschlüssel die keine Pflichtfelder sind, dürfen in Tabelle und Formular keinen Eintrag beim Standardwert haben.
Dieser Hinweis ist ganz allgemein gemeint, und falls du dich doch dafür entscheiden solltest, die Serien-ID freizulassen, so darf hier keine 0 gespeichert werden.
Sorry, aber mit der Lösung "Version 9" kann ich mich nicht anfreunden. Was wäre der Vorteil? Es gibt doch keine freie Kombinierbarkeit von Verlag und Serie, wenn ich dich richtig verstanden habe. Also bspw. "Serie A" von "Verlag 1"
und "Verlag 2" - oder?!
PS:
ZitatWeiterhin sehe ich noch, dass das Feld SerieID_F der tblSerieVerlag leer ist.
Dann solltest du auch die Tabelle "tblSerieVerlag" aktualisieren und nicht die "tblSerien". Auf Basis der vorhandenen Tabellen ist das aber wohl kaum möglich, oder enthält die "tblSpiele" bereits einen gültigen Fremdschlüssel auf "tblSerieVerlag" und ist der Fremdschlüssel auf "tblSerie" noch vorhanden??
Hallo Maggie,
Zitat von: MaggieMay am Januar 25, 2016, 00:02:03
das ließe sich doch durch eine Plausibilitätsprüfung vor der Speicherung in Verbindung mit entsprechenden Rückfragen lösen.
Ja, vorher schon. Aber wenn man dann in 9 Monate reinschaut, dann fragt man sich. Hab ich das nur vergessen oder ist es ohne Serie? Deswegen würde ich gerne pro aktiv einen Eintrag machen, ein Pflichtfeld. Dann ist das Thema durch.
ZitatFremdschlüssel die keine Pflichtfelder sind, dürfen in Tabelle und Formular keinen Eintrag beim Standardwert haben..... Dieser Hinweis ist ganz allgemein gemeint, und falls du dich doch dafür entscheiden solltest, die Serien-ID freizulassen, so darf hier keine 0 gespeichert werden.
Wenn ich die aktuelle DB nehmen 1.4.5, also ohen Zwischentabelle, dann gibt es in der tblSerien keine SerienID 0. Die Vorraussetzung wäre da. Es gibt aktuell in der tblSerien ID 129 ohne Seriezuordnung und ID 132 keine Serienzuordnung, ID137 ohne Serie, welche 3 Verlagen zugeordnet sind. So könnte ich das natürlich auch lösen, aber das ist ehrlich gesagt "dilettantisch".
ZitatSorry, aber mit der Lösung "Version 9" kann ich mich nicht anfreunden. Was wäre der Vorteil? Es gibt doch keine freie Kombinierbarkeit von Verlag und Serie, wenn ich dich richtig verstanden habe. Also bspw. "Serie A" von "Verlag 1" und "Verlag 2" - oder?!
Hmmm, doch die gab es schon, ich hatte dann auch bei jedem Verlag die Serie Ohne Serie dabei. Das würde schon gehen.
ZitatWeiterhin sehe ich noch, dass das Feld SerieID_F der tblSerieVerlag leer ist.Dann solltest du auch die Tabelle "tblSerieVerlag" aktualisieren und nicht die "tblSerien". Auf Basis der vorhandenen Tabellen ist das aber wohl kaum möglich, oder enthält die "tblSpiele" bereits einen gültigen Fremdschlüssel auf "tblSerieVerlag" und ist der Fremdschlüssel auf "tblSerie" noch vorhanden??
Ja, in einer Kopie der DB hatte ich das soweit umgebaut, also die tblSerien hatte ich dupliziert und tblSerieVerlag genannt. In der kopierten Tablle sind die Felder PK SerieVerlagID und FK VerlagID_F und SerieID_F, aus tblSerien den FS VerlagID_F entfernt. In der tblSpiele das Feld SerieID_F in SerieVerlagID_F umbenannt. Entsprechend die Beziehungen, die Abfrage und das Hauptformular angepasst. Wahrscheinlich macht man das schon so nicht, stimmts? Das Kombifeld Serie im Hauptformular stellt nichts zur Auswahl, und das Feld SerieID_F in der tblSerieVerlag bleibt leer. Wenn ich Eintrage mache geht das, aber das ist ja Quatsch.
Aber eine Frage habe ich zur aktuellen DB mit einem Lösungsansatz zu meiner Frage.
Aktuell ist das Thema ja über eine Abfrage gelöst.
SELECT tblSerien.SerieID, tblSerien.Serie
FROM tblSerien
WHERE (((tblSerien.VerlagID_F)=[Formulare]![frmErfassung]![cboIDVerlag]))
ORDER BY tblSerien.SerieID;Ist es da nicht möglich, dass wenn er den Select macht, dass man ihm dann zusätzlich mitgibt, dass er außerdem die IDXY der tblSerien mit dazu packt??
Vielleicht mache ich mich da lächerlich mit dem Gedankengang, aber mit einem Select kann man doch viele "Schweinereien" machen, oder?
Gruß Andreas
Hi @ all,
das Thema ist gelöst, und zwar so wie ich es gestern Abend in meinem abschließenden Beitrag formuliert habe. Vielleicht nicht die schickeste Art, aber vom Aufwand her der geringste, funktional und nachvollziehbar.
SELECT tblSerien.SerieID, tblSerien.Serie
FROM tblSerien
WHERE (((tblSerien.VerlagID_F)=[Formulare]![frmErfassung]![cboIDVerlag]))OR (tblSerien.SerieID = 129)
ORDER BY tblSerien.SerieID;
Danke für die Unterstützung und das ertragen meiner manchmal "komischen" Fragen.
Gruß Andreas