Entwickler-Ecke
Datenbanken - Wie kommen Verknüpfungen Zustande (1:n & 1:1)?
NoEon - Mo 07.04.03 13:17
Titel: Wie kommen Verknüpfungen Zustande (1:n & 1:1)?
Hallo, Mahlzeit
ich hab hier drei Tabellen
einen mit dem Inhalt:
softintern
softextern
Kategorie
Kurzbeschreibung
Stand
die zweite mit
Kategorie
die Dritte mit
Firmenname
ich möchte auf dem Forumlar eine pull down Listbox haben, inder sollen etliche Kategorien stehen (aus der zweiten Tabelle) sollen diese dann kommen die Trag ich da noch ein.
jetzt will ich die Kategorie auswählen bzw. ich wähle sie aus und wenn ich dann auf einen Knopf drücke soll die Kategorie aus der Kategorie Liste in die erste liste in das Feld Kategorie übertragen werde.
Das ist mein erstes Problem. Ist irgendwie doch nur ne kopier Funktion oder so....oder?? :?:
Dann kann es sein das die Software (softintern aus der ersten Tabelle) von unterschiedlichen Firmen genutzt wird. Das muss ich ja auch irgendwie darstellen oder??
Beispiel Software xy wird benutzt von Firma 1, Firma B und so weiter.. das koennen Teilweise bis zu 50 Firmen sein!
Kann mir da mal jemand geistig zur Seite stehn?? Wäre echt super nett!
Kauft euch nicht das Buch Programmieren lernen in Delphi 6 das ist nicht so gut, da versteht man echt null!
Gruss
NoEoN
JFK - Mo 07.04.03 13:32
???
Access, MS-SQL Server, Oracle, DB2
was benutzt du ?
NoEon - Mo 07.04.03 13:39
die Frage würde sich auch noch stellen oder?? Also das soll keinen Grosse Anwendung werden! Ich hab hier die Möglickeit was auf nem Server zu speichern. Brauch ich für so einen Datenbank schon einen Server??
Also das was ich beschreiben habe, soll auf mehreren (max 20 Workstationen lauffähig sein)
und ja halt änderungen sollen für jeden sichtbar sein!
...ich frag mal eben unsern Admin ob wir da noch was von dem was du gefragt hast.
Erstellen halt unter Delphi... :roll:
....ne also das ist alles was ich sagen kann! Kein SQL Server oder ähnliches, sorry.
foxy - Mo 07.04.03 14:17
er meint welchen datenbanktyp du benutzt ...
NoEon - Mo 07.04.03 14:21
Sorry da verste ich die Frage nicht, noch benutze ich gar nichts! Ich kann mich also entscheiden, wobei ich von mySQL schon mal was auf meinem Rechner drauf hatte.
oder tappe ich imemr noch im dunkeln??
LCS - Mo 07.04.03 15:22
Hi
| NoEon hat folgendes geschrieben: |
die Frage würde sich auch noch stellen oder?? Also das soll keinen Grosse Anwendung werden! Ich hab hier die Möglickeit was auf nem Server zu speichern. Brauch ich für so einen Datenbank schon einen Server??
|
Na zuerst brauchst du mal überhaupt eine Datenbank. Foxy und JFK wollten von dir wissen welche. Ob die Datenbank dann später tatsächlich auf dem Server läuft, spielt an der Stelle noch keine (grosse) Rolle. Guckst du
hier [
http://www.delphi-forum.de/viewtopic.php?t=160].
Gruss Lothar
NoEon - Mo 07.04.03 15:30
Also ok.. damit alle auf das gleiche Zugriff, also auf die gleichen Daten haben., muss doch ein Server irgendwo her oder??
Hmm naja wie bewerkstellige ich das ?
ich lese mir aber erstmal durch was Du eben meintest
lars
NoEon - Mo 07.04.03 15:40
ok da bin ich wieder,
ich will aber mal anderes fragen. was wäre für mich die beste Möglichkeit bzw. das Beste?
brauchen Ihr von mir dafür noch ein paar angaben??
damit will ich sagen das wir richtig bei null anfangen koennen. Das übt schoen! ---> und ich hab am ende sogar noch was davon gelernt!
Gruss
Lars
foxy - Di 08.04.03 08:05
mal ganz zum anfang ... du brauchst dir um sen server jetzt noch keine gedanken zu machen ... du erstellst sowiso erst einma ne locale db ... ich benutze z.B. Interbase
dann amchst du erst einmal deine db struktur und erzeugst primäre schlüssel und foreigen schlüssel( für 1:n beziehung)
wenn du soweit bist dann meld dich ma ...
NoEon - Di 08.04.03 10:12
jo soweit bin ich, ich hab ne schone Tabelle mit nem Primärschluessel gemacht. maintabelle.db heisst die... ist im Paradox Format gespeichert
und Local auf meinem PC.
ich stelle mir gerade die Frage ob es sinn macht mehr Tabellen zu erzeugen. Es kommt wohl imemr darauf an was man machen will oder??
was kommt jetzt??
Aso, ich habe schon die zuweisungen im Delphi gemacht, also die Datasource einstellen und so.. das kann ich, das haut gut hin, das Prinzipp dieser Methode hab ich verstanden.
Aber wie kann ich jetzt sinnvoll weiter machen? Kann ich dir angaben mahen mit denen Du etwas anfangen kannst??
gruss
Lars
foxy - Di 08.04.03 10:54
ForeigenKeys erstellen zu den tabbeln mit einer referenziellen bedingun :D
ForeigenKey = Fremdschlüssel
wie das genau geht kann ich dir selber nicht sagen weil ich mit meiner db genau vor dem selben problem stehe .... wenn einer ma da eine konkrete antwort hat mit bsp oder tut wär ich danke ... also für interbase ;)
LCS - Di 08.04.03 11:06
Hi
| NoEon hat folgendes geschrieben: |
ich stelle mir gerade die Frage ob es sinn macht mehr Tabellen zu erzeugen. Es kommt wohl imemr darauf an was man machen will oder??
|
Da hast du recht. Deshalb überlegt man sich das auch vorher. :wink:
| NoEon hat folgendes geschrieben: |
was kommt jetzt??
|
Ich würde sagen, das Erstellen der restlichen Tabellen entsprechend deiner Datenbankstruktur. Also so wie du's oben beschreiben hast. Und wenn das alles Fertig ist, nehmen wir uns die Steuerelemente vor.
@foxy
| foxy hat folgendes geschrieben: |
ForeigenKeys erstellen zu den tabbeln mit einer referenziellen bedingun
ForeigenKey = Fremdschlüssel
wie das genau geht kann ich dir selber nicht sagen weil ich mit meiner db genau vor dem selben problem stehe .... wenn einer ma da eine konkrete antwort hat mit bsp oder tut wär ich danke ... also für interbase
|
Dann stell doch einfach mal ne konkrete Frage :D
Gruss Lothar
foxy - Di 08.04.03 11:07
jaja ich mach demnächst ein thread auch wenn ich wieder dort bin immo bin ich woanders dran .... ist ein bischen komplizierter als das ich jetzt da mit einem satz alles sagen könnte :)
NoEon - Di 08.04.03 11:54
ich bin mir nict sicher ob es sinn mach merh Tabellen zu erzeugen, kann mir das vieleicht jemand sagen!??
Also meine Tabellen struktur ist jetzt wie folgt.
maintabelle:
-softnameintern (A)
-softnameintern (A)
-kategorie (A)
-kurzbeschreibung (M)
-stand (D)
-Besonderheiten (M)
so und nun hab ich das Problem (Gedanklich), das ich gerne auch noch Sagen möchte welche Kunden die jeweilige Software Benutzen, und das koennen ja nun auch ein paar mehr sein.. ist ja logisch, aber ich kann mir nicht vorstellen das ich jetzt in die Maintabelle noch Kunde1, Kunde2, etc eintragen muss.
Da liegt nämlich jetzt mein Problem, das ich nicht weiss wie ich das genau managen soll. Konnte ich mein Problem deutlich darstellen?
:arrow: Hab gerade mal gefragt ich darf nen Server mir aufsetzten auf dem ich .. was weiss ich machen kann.. nur für meine Datenbanken! ist das nicht geil?? :!: :twisted:
Gruss
lars
foxy - Di 08.04.03 12:20
so ähnlich iss meine db auch ... und habe in deinem fall für die kunden eine 2. tabelle erzeugt eben eine 1:n beziehung
andere möglichkeit wäre in dein DB grid in eine zeile in der die kunden stehn eine combobox ein zu bauen ... oder du machst es dynamisch und erweisters immer um ine spalte pro kunde ... aber im ernst das iss alle nich sehr profesionell ;)
is doch schöner wenn du auf die zeile klickst ein neuer bildschirm kommt mit den dazugehörigen kunden ... diese thema wurde aber schon oft hier behandelt
LCS - Di 08.04.03 12:28
Hi
also das Problem mit dem du dich gerade rumschlägst, nennt man in der Datenbanksprache
Normalisierung. Aus dem Haufen von Informationen den man speichern möchte eine vernünftige DB-Struktur hinzukriegen.
Auf der einen Seite hast du also deine Tabelle für die Software. Und jetzt sollen auch noch die Kunden ins Spiel kommen. Wie du richtig erkannt hast, ist es nicht gerade klug die Kunden in die Softwaretabelle aufzunehmen. Also brauchst du als nächstes eine Tabelle für die Kunden. Die Verbindung zwischen Software und Kunden geschieht dann über eine dritte Tabelle. In der wird sozusagen festgehalten, welcher Kunde welche Software einsetzt.
Schematisch dargestellt:
Tabelle SOFTWARE
- SW_ID (Primärschlüssel)
- SW_NAME
- weitere Daten
Tabelle KUNDEN
- KD_ID (Primärschlüssel]
- KD_NAME
- weitere Daten
Tabelle EINSATZ
- E_NUMMER (Primärschlüssel, AutoInc)
- KD_ID (ID des Kunden)
- SW_ID (ID der eingesetzten Software)
- eventuell weitere Daten
Mit diesem Aufbau werden sowohl Kunden, als auch Software nur einmal erfasst, können aber beliebig oft miteinander in Verbindung gebracht werden. Darauf lässt sich ohne Probleme abfragen welche Kunden die Software XY einsetzen oder welche Software der Kunden YZ einsetzt.
Wenn du Datenbanken wirklich sinnvoll einsetzen willst, bleibt dir die Auseinandersetzung mit der grauen Theorie leider nicht erspart. Und genau da solltest du ansetzen.
Gruss Lothar
NoEon - Di 08.04.03 12:42
graue Theorie, ja das stimmt, darum bin ich ja hier, gluab mal ja nicht ichhab schon recykeltes Papier bekommen und die versuaten Papieren aus der Firma landen alle bei mir.. weil ich die alle mit entwürfen voll schmiere. Aber ich hab hier leider niemanden der mal was von Theorie versteht. ( darum danke das Ihr alle da seid)
das klingt super vernüftig.
ich werde mich mal an dein Beispiel halten und das versuchen zu strukturieren. Ich denke das sollte nicht das Problem sein!
was ist "(Primärschlüssel, AutoInc)"?
Primärschluessel ist klar!
So wie ich das sehe sind das genau die anforderungen (datentechnisch gesehn) die ich brauche!
Wie mach ich den jetzt Sinnvoll weiter Ich denke das hat mir ne ganze menge gebracht bis jetzt, wäre klasse wenn Ihr euch noch ein bsichen mit mir beschäftigen koennt.
Dake noch mal bis hier!!
Lars
LCS - Di 08.04.03 12:54
Hi
| NoEon hat folgendes geschrieben: |
was ist "(Primärschlüssel, AutoInc)"?
Primärschluessel ist klar!
|
Im Gegensatz zur Kunden-ID oder Sofware-ID, die ja meist irgendwelchen Regeln (und wenns nur die Debitorennummer der FiBu ist) unterliegen, wird diese Nummer nur intern verwendet. In der Praxis bekommt die der Anwender niemals zu sehen. Deshalb kann sie ohne Probleme automatisch generiert werden. Eben ein Zähler- oder AutoInc-Feld dass die Datenbank selber füllt.
Gruss Lothar
NoEon - Di 08.04.03 13:01
ahhh ich versteh.. hmm hab ich alles fein fertig gemacht, und noch ein paar Memo Felder eingefügt. Für die Software beschreibung, Kategorie darf ich nicht vergessen!
Ok... was sollte ich jetzt amchen?? Muessen die Tabellen noch alle untereinander verknüpft werden??
Wenn ja wie mache ich das??
Gruss
Lars
LCS - Di 08.04.03 13:14
Hi
Normalerweise ja, aber bei Paradox-Tabellen machts wenig Sinn. Obwohl du auch hier mit dem DB-Desktop für einzelne Felder eine Nachschlagetabelle festlegen kannst.
Für die Tabelle Einsatz könnte man festlegen: Feld KD_ID wird nachgeschlagen in KUNDEN.KD_ID, Feld SW_ID wird nachgeschlagen in SOFTWARE.SW_ID.
Die ganzen Zusammenhänge mit den Steuerelementen sind mir jetzt zuviel zum Schreiben. Da bau ich dir mal ein kleines Beispielprogramm. Schick mir mal ne PN mit deiner eMail Adresse, dann schick ich dir das morgen früh.
Gruss Lothar
NoEon - Di 08.04.03 13:22
ahh ja pn hast du bekommen,
diese zuweisung die du da beschrieben hast.. das ist eine Sache die ich mal probiert habe, die mir aber nicht so ganz klar war und zwar in folgendem Punkt
-bin ich dafür in der richtigen Maske?
das ist ja schon mal sche**** das ich nicht weiss wo ich das machen soll??
Im Tabelleneditor?
hmm
gruss
lars
LCS - Di 08.04.03 14:40
Hi
Tabelle im DBDesktop öffnen
Button umstrukturieren klicken
Aus der Listbox "Tabelleneigenschaften" Nachschlagetabelle auswählen
definieren klicken
Gruss Lothar
NoEon - Di 08.04.03 16:05
Lothar, das Ging alles ganz gut so wie ich das beurteilen kann..., ist es so.. das alles was man "verbinden" will einen primärschlüssel haben muss?
So und nun schau ich mal wie ich das schoen aufgebaut bekomme!
Hoffe mal das es klappt!
NoEon - Do 10.04.03 13:45
so nunhab ich endlich wieder den Anschluss gefunden.
aber ichhabe iemr noch das Problem, auf dem Papier habe ich mir die Tabellen fertig aufgemalt. Natürlich auch mit den dazugehörigen Verknüfungen. Aber ich kann nun natürlich nicht weiterkommen, weil ich nicht weiss wie diese Verbindung unter Delphi zustanden kommen!
Wer kann mir das mal sagen.
ich hab die Tabellenstruktur auch hier als Excel Datei liegen, wel will kann sich das ja mal anschauen!
Danke
Gruss
Lars
p.s. ja ich weiss das wir das Thema schon behandelt hatten, aber das hat mir leider nicht richtig weitergeholfen.
LCS - Do 10.04.03 14:00
Hi
das kommt darauf an, was du damit machen willst. Für die Verbindung zur Darstellung in den Steuerelementen verwendest du z. B. die Eigenschaften MasterSource und MasterField.
Wenn du Daten mittels TQuery abfragst werden die Daten mittels SQL JOIN in Verbindung gebracht.
Wenn du die Integritätsregeln schon in derDatenbank festlegen willst, legst du nachschlagetabellen im DB Desktop an.
Gruss Lothar
NoEon - Do 10.04.03 14:06
Mensch Lothar, das ist alles absolut perfekt was du da erzählst.. doch brauch ich imemr recht lange bis ich was mit den Begriffen anfangen kann die Du alle Benutzt! Kann ich Dir mal die Struktur schicken?? auf Excel Basis?
NoEon - Do 10.04.03 14:56
so.. nun hab ich aber gleich die schneuze voll.. das geht alles nicht. er sagt das er mindestens ein zuordbare Feld braucht, aber dashab ich doch um alles ind er Welt.. gleicher wert, gleich ..alles gleich aber das lässt sich nicht anstellen.. also muss ich das nun doch überdie Eigenschaften regel?? ich denke schon.. da geht mir langsam auch ein licht auf!
lars
NoEon - So 13.04.03 12:58
alles nur noch halb so wild; Dank Lothar!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!