Hallo!
Am 16. November 2010 15:05 schrieb Ottmar-Schmidt@web.de:
Hallo Freunde, nach dem ich einfach auch eine Weile keine Zweit mehr für mein Datenbankprojekt "Apfelsorten" hatte, habe ich das Projekt wieder aufgenommen.
Mein Problem ist nach wie vor die Deffinition eines Feldes und der darin vorhandenen Eigenschaften(Mehrzahl).
Ich sollte in einem Feld mehrere mehrere Inhalte einfügen können. Nicht jede Datensatz hat gleich viele Einträge. Sollten aber diese Eigenschaften via SQL abgefragt werden, sollte jeder Datensatz der die gefragte Eigenschaft mit hinterlegt wird, auchausgegeben werden. Kann ich das mit Feldtype "multible" machen und wenn ja wie funktioniert das????
Wie wärs, wenn du dir den alten Thread nochmal durchliest und die Vorschläge, die dort gekommen sind, umsetzt?
Grüße, morphium
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo Ottmar,
deine Ausführung klingt für mich, als ob Du die "Normalisierung" von relationalen Datenbanken noch nicht verstanden hast.
Ziel sollte es nicht sein an jedem Datensatz N verschiedene Attribute zu pflegen. Viel Sinnvoller wäre es doch die möglichen Attribute mit den möglichen Datensätzen zu verbinden.
zb. kann das so aussehen:
Tabelle Sorten: ID 1 Name Gelber Köstlicher [weitere eineindeutige Attribute]
[[Attribute]] Tabelle Farben: ID 1 Farbe Rot
ID 2 Farbe Grün
ID 3 Farbe Gelb
ID 4 Farbe Braun
Tabelle Krankheiten: ID 1 Name WeißderGeier
[[Verknüpfungen]] Tabelle Sorte_Farbe: ID 1 Sorte_id 1 Farbe_id 3
Tabelle Sorte_Krankheit: ID 1 Sorte_id 1 Krankheit_id 1
Suchen kannst du nun über Joins oder über jede einzelne Tabelle.
Select * FROM Sorten as S, left join Sorte_Farbe as S_F on S_F.Sorte_id = S.ID, left join Sorte_Krankheit as S_K on S_K.Sorte_id = S.ID left join Farben as F on S_F.Farbe_id = F.ID, left join Krankheiten as K on S_K.Krankheit_id = K.ID
WHERE
F.Farbe='Grün'
Würde Dir alle grünen Sorten bringen.
Man könnte der Einfachheit halber auch über eine Sorte_Option - Tabelle nachdenken
Tabelle Sorte_Option: ID 1 Name 'Farbe' Value 'Grün'
Dann würde man nur nach dem Value suchen... Ob das Sinnvoll ist, hängt stark von deiner Anwendung ab ;)
Am 16.11.2010 15:05, schrieb Ottmar-Schmidt@web.de:
Hallo Freunde, nach dem ich einfach auch eine Weile keine Zweit mehr für mein Datenbankprojekt "Apfelsorten" hatte, habe ich das Projekt wieder aufgenommen.
Mein Problem ist nach wie vor die Deffinition eines Feldes und der darin vorhandenen Eigenschaften(Mehrzahl).
Ich sollte in einem Feld mehrere mehrere Inhalte einfügen können. Nicht jede Datensatz hat gleich viele Einträge. Sollten aber diese Eigenschaften via SQL abgefragt werden, sollte jeder Datensatz der die gefragte Eigenschaft mit hinterlegt wird, auchausgegeben werden. Kann ich das mit Feldtype "multible" machen und wenn ja wie funktioniert das????
Grüße aus dem Weinland Baden
GRATIS! Movie-FLAT mit über 300 Videos. Jetzt freischalten unter *http://movieflat.web.de*
Lug-dd maillist - Lug-dd@mailman.schlittermann.de https://ssl.schlittermann.de/mailman/listinfo/lug-dd
- -- Mit freundlichen Grüßen / With kind regards
Jan Leonhardt
IT-Dienstleistungen IT-Konsultant Administration Softwareentwicklung
Hallo Jan,
generell hätte ich mir eingebildet das einigermaßen verstanden zu haben, aber vielleicht auch nicht ganz.
ich habe z.B. eine Haupt-Tabelle "Apfelsorten" und eine Eigenschaften-Tabelle apfelkrankheiten
In "Apfelkrankheiten" liegt mein Datensatz in der Eigenschaften-Tabelle, "apgelkrankheiten" gibts 2 Felder , die Laufnummer und der Krankheitsnamen"
1 schorf 2 mehltau 3 Spinnmilbe 4 apfelsägewespe 5 Apfelwickler 6 Feuerbrannt 7 Kragenfäule
usw. da sind so 15-20 Einräge drin
wäre jede Sorte nur für einen Schädling anfällig wäre das Verknüpfen des Eigenschaftsfelds Krankheiten einfach.
Nicht jede Apfelsorte ist für jeden Schädling anfällig und nicht jede Apfelsorte hat gleich viele Schädlingsanfälligkeiten.
Ich muss im Datensatz der Haupttabelle Apfelsorten theoretisch ein Feld deffinieren in dem ich die ID´s aus der Krankheitentabelle hinterlegen/verknüpfen kann. also 1:n
Beispiel bei eine Apfelsorte Apfel ist für 1,3,5,7 die Nächste 2,4,6 die Nächste 3,4, die Nöächste gar nix und dann komt eine in der nur die 7 eingetragen ist usw.
Daß ich da 2 Tabelen verknüpfen mussdessen bin ich mir bewust nur das wie ist mir in dem Fall, in dem ich nicht imer gleich viele aber generell mehrere Werte brauche, das weiss ich nicht wie ichs machen soll.
Da fehlt mir jetzt auch Wissen, ich mach normal nicht viel mit Datenbanken.
VG
Ottmar
-----Ursprüngliche Nachricht----- Von: "Jan Leonhardt" jan@cyberdesigner.net Gesendet: 16.11.2010 17:19:24 An: lug-dd@mailman.schlittermann.de Betreff: Re: Datenbank Datenfedtyp Multible
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hallo Ottmar,
deine Ausführung klingt für mich, als ob Du die "Normalisierung" von relationalen Datenbanken noch nicht verstanden hast.
Ziel sollte es nicht sein an jedem Datensatz N verschiedene Attribute zu pflegen. Viel Sinnvoller wäre es doch die möglichen Attribute mit den möglichen Datensätzen zu verbinden.
zb. kann das so aussehen:
Tabelle Sorten: ID 1 Name Gelber Köstlicher [weitere eineindeutige Attribute]
[[Attribute]] Tabelle Farben: ID 1 Farbe Rot
ID 2 Farbe Grün
ID 3 Farbe Gelb
ID 4 Farbe Braun
Tabelle Krankheiten: ID 1 Name WeißderGeier
[[Verknüpfungen]] Tabelle Sorte_Farbe: ID 1 Sorte_id 1 Farbe_id 3
Tabelle Sorte_Krankheit: ID 1 Sorte_id 1 Krankheit_id 1
Suchen kannst du nun über Joins oder über jede einzelne Tabelle.
Select
FROM Sorten as S, left join Sorte_Farbe as S_F on S_F.Sorte_id = S.ID, left join Sorte_Krankheit as S_K on S_K.Sorte_id = S.ID left join Farben as F on S_F.Farbe_id = F.ID, left join Krankheiten as K on S_K.Krankheit_id = K.ID
WHERE
F.Farbe='Grün'
Würde Dir alle grünen Sorten bringen.
Man könnte der Einfachheit halber auch über eine Sorte_Option - Tabelle nachdenken
Tabelle Sorte_Option: ID 1 Name 'Farbe' Value 'Grün'
Dann würde man nur nach dem Value suchen... Ob das Sinnvoll ist, hängt stark von deiner Anwendung ab ;)
Am 16.11.2010 15:05, schrieb Ottmar-Schmidt@web.de:
Hallo Freunde, nach dem ich einfach auch eine Weile keine Zweit mehr für mein Datenbankprojekt "Apfelsorten" hatte, habe ich das Projekt wieder aufgenommen.
Mein Problem ist nach wie vor die Deffinition eines Feldes und der darin vorhandenen Eigenschaften(Mehrzahl).
Ich sollte in einem Feld mehrere mehrere Inhalte einfügen können. Nicht jede Datensatz hat gleich viele Einträge. Sollten aber diese Eigenschaften via SQL abgefragt werden, sollte jeder Datensatz der die gefragte Eigenschaft mit hinterlegt wird, auchausgegeben werden. Kann ich das mit Feldtype "multible" machen und wenn ja wie funktioniert das????
Grüße aus dem Weinland Baden
GRATIS! Movie-FLAT mit über 300 Videos. Jetzt freischalten unter *http://movieflat.web.de*
Lug-dd maillist - Lug-dd@mailman.schlittermann.de https://ssl.schlittermann.de/mailman/listinfo/lug-dd
Mit freundlichen Grüßen / With kind regards
Jan Leonhardt
IT-Dienstleistungen IT-Konsultant Administration Softwareentwicklung -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAkzirwgACgkQKGMAkLB23Lif5ACgi/NEwyd5O7ZNXMn/CJn4gftd RvMAoIeOl1ijYK8f5R1yw24rRUFumA7T =Tnit -----END PGP SIGNATURE-----
___________________________________________________________ WEB.DE DSL Doppel-Flat ab 19,99 €/mtl.! Jetzt auch mit gratis Notebook-Flat! http://produkte.web.de/go/DSL_Doppel_Flatrate/2
Am 16.11.10 20:52, schrieb Ottmar-Schmidt@web.de:
Hallo Jan,
generell hätte ich mir eingebildet das einigermaßen verstanden zu haben, aber vielleicht auch nicht ganz.
ich habe z.B. eine Haupt-Tabelle "Apfelsorten" und eine Eigenschaften-Tabelle apfelkrankheiten
In "Apfelkrankheiten" liegt mein Datensatz in der Eigenschaften-Tabelle, "apgelkrankheiten" gibts 2 Felder , die Laufnummer und der Krankheitsnamen"
1 schorf 2 mehltau 3 Spinnmilbe 4 apfelsägewespe 5 Apfelwickler 6 Feuerbrannt 7 Kragenfäule
usw. da sind so 15-20 Einräge drin
wäre jede Sorte nur für einen Schädling anfällig wäre das Verknüpfen des Eigenschaftsfelds Krankheiten einfach.
Nicht jede Apfelsorte ist für jeden Schädling anfällig und nicht jede Apfelsorte hat gleich viele Schädlingsanfälligkeiten.
Anders: Jede Apfelsorte kann für keine, eine oder mehrere Schädigungen anfällig sein. Jede Schädigung kann bei einer oder mehreren Apfelsorten auftreten.
Es gibt eine Apfelsorten-Tabelle und eine Schädigungs-Tabelle.
Apfelsorten und Schädigungen können durch eine dritte Tabelle verknüpft werden:
lfdNr Apfelsorte Schaden ------------------------------- 1 A Schorf 2 A Milbe 3 B Schorf 4 D Apfelwickler 5 D Feuerbrand :
wobei in Wahrheit statt "A" und "Schorf" die jeweilige ID der Sorte und der Schädigung in der Tabelle steht. Alle anderen Eigenschaften des Apfels und der Schädigung stehen in den jeweiligen Tabellen.
Die Eintragungen in der Zuordnungstabelle müssen in keiner Weise geordnet sein. Du kannst nach dem jeweils aktuellen Stand der Forschung den einzelnen Apfelsorten immer weitere Schädigungen zuordnen.
Wenn Du am Ende wissen willst, welche Schädigung bei welcher Apfelsorte auftreten kann, dann fragst Du die drei Tabellen ab. Und genauso machst Du es, wenn Du wissen willst, welcher Apfel durch welche Schädigungen betroffen ist.
Stefan
.
On Tuesday 16 November 2010, lago20@gmx.de wrote:
Am 16.11.10 20:52, schrieb Ottmar-Schmidt@web.de: Es gibt eine Apfelsorten-Tabelle und eine Schädigungs-Tabelle.
Apfelsorten und Schädigungen können durch eine dritte Tabelle verknüpft werden:
lfdNr Apfelsorte Schaden
1 A Schorf 2 A Milbe 3 B Schorf 4 D Apfelwickler 5 D Feuerbrand
wobei in Wahrheit statt "A" und "Schorf" die jeweilige ID der Sorte und der Schädigung in der Tabelle steht. Alle anderen Eigenschaften des Apfels und der Schädigung stehen in den jeweiligen Tabellen.
Die Eintragungen in der Zuordnungstabelle müssen in keiner Weise geordnet sein. Du kannst nach dem jeweils aktuellen Stand der Forschung den einzelnen Apfelsorten immer weitere Schädigungen zuordnen.
...deswegen bekommt diese Tabelle auch keine lfdNr Spalte.
In Natura sollte das etwa so aussehen: SortenId SchadenId -------------------- 1 1 1 3 4 1 2 3 5 2 ...etc.
Angelegt wird das etwa so: CREATE TABLE ApfelSchaden ( SortenId INT NOT NULL REFERENCES Apfelsorten(SortenId), SchadenId INT NOT NULL REFERENCES Schaden(SchadenId), PRIMARY KEY (SortenId,SchadenId) );
Je nach Datenbank muss man INT durch einen anderen Typ ersetzen (z.B. DECIMAL) und noch ein wenig Krempel für korrekte Transaktionen und Referenzen hinzufügen (MySQL kann das nicht auf MyISAM - es ist halt kaputt). Auch die Referenzen sollten natürlich auf die korrekte Tabelle/Spalte zeigen...
Zum Thema Abfrage haben die Manuals der jeweiligen Datenbanken ganze Kapitel (Stichwort "JOIN"). Hinweis: es ist nicht schlimm wenn die WHERE Klausel eines SELECT über mehrere Zeilen geht... ;-)
Konrad
lug-dd@mailman.schlittermann.de