AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wieder mal die Tabellenstrukturen

Wieder mal die Tabellenstrukturen

Ein Thema von stOrM · begonnen am 18. Mai 2017 · letzter Beitrag vom 23. Mai 2017
Antwort Antwort
Seite 1 von 6  1 23     Letzte » 
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Duisburg
402 Beiträge
 
Delphi 10 Seattle Architect
 
#1

Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 06:53
Datenbank: MySQL • Version: 5.7 • Zugriff über: Unidac
Moin,
ich bräuchte mal wieder Hilfe bezüglich einiger Tabellen die ich anlegen muss da weiß ich im Moment nicht was in welcher Tabelle stehen muss und wie sich das ganze verknüpfen soll.
Im Grunde geht es darum ein Angebot zu erstellen, mit folgender Struktur die vom Benutzer ausgefüllt werden soll:

1. Laufende Nummer
2. Bezeichnung
3. Menge
4. Einheit (Kg, m2, Std usw...)
5. E-Preis
6. G-Preis

Soweit so gut, jetzt dachte ich lege ich erstmal zum Test 3 Tabellen an:

Kundentabelle
Produkte
Angebote

Dabei tritt aber folgendes Problem auf, als Bezeichnung können z.B. auch Anfahrtskosten stehen. Jetzt weiss ich nicht soll ich die mit in die Produkttabelle aufnehmen, oder z.B. so etwas machen:

Zonen-Tabelle
Zone1 / Preis
Zone 2 / Preis
Zone 3 / Preis

Dann gehts weiter was ist mit den Einheiten?
Da brauche ich ja dann noch eine Tabelle für die verschiedenen Einheiten?

Also hab ich jetzt schon
Kunden,
Produkte
Einheiten
Zonen

Wenn ich das in Felder aufspalte, dann hab ich jetzt in etwa so etwas (nicht alle Felder aufgeführt, nur grob umrissen)

Kundentabelle
pk
kundennr
kundenname
....

Produkttabelle
pk
bezeichnung
e-preis
produkt
artikelnr
artikelnr_intern

Zonentabelle
Zone1 / Preis
Zone 2 / Preis
Zone 3 / Preis

Einheitentabelle
pk
bezeichnung_einheit

Angebote
pk
angebotsnummer
kundennummer
laufendenummer
bezeichnung
menge
leistungsdatum

Im Grunde müsste ich einmal wissen, welche Tabelle muss welche Felder aufnehmen und wie müssen die Tabellen zwingend verknüpft werden.
Ich hab zwar eine Menge dazu gelesen, aber leider keine Beispiele gefunden, die ich sinnvoll hätte nachvollziehen können.

Ich hab das jetzt schon zig mal versucht, bin aber immer wieder gestolpert.
Erst hab ich gar nichts verknüpft, nur über Joins mir die Sachen zusammen gesaugt, was zwar geht, aber so ist es bestimmt nicht im Sinne des Erfinders.
Dann hab ich mit PK und FK rumgefummelt, was zu diversen Problemen geführt hat, ich konnte plötzlich keine Daten mehr eingeben (update war nicht erlaubt, wegen meiner Verknüpfungen bis auf die Kundentabelle mit der durfte ich weiterhin alles machen)

Verknüpft war es in etwa so das aus der Angebotstabelle sich ein Feld auf die Kundennummer in der Kundentabelle bezog, die Produkttabelle mit Ihrer Produktnummer auf die Angebotstabelle mit dem Feld Produktnummer usw. jedenfalls völliges Chaos.

Mal generell noch eine Frage zur Verknüpfung.:

Geht so etwas automatisch das wenn man in der Angebotstabelle z.B. unter Artikelbezeichnung einen Artikel eingibt, das in der Angebotstabelle automatisch beim E-Preis der Preis steht oder muss ich dann ein weiteres Query ausführen im Hintergrund welches mir den Preis zum Produkt ermittelt und dann in das vorgesehene Feld schreibt? Wäre auch z.B. auch wenn ich eine Artikelnummer eingebe die ich zufällig auswendig kenne das dann automatisch die Bezeichnung im Bezeichnunsfeld steht?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
3.616 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 08:01
Moin...
Dein Problem ist nicht einfach zu erklären. Das muß man erstmal in Teilprobleme aufteilen:

1: Normalisierung sollte man kennen (1. Normalform) https://de.wikipedia.org/wiki/Normal...ng_(Datenbank) ... siehe Bilder, "Beziehungen" auf die Detailtabellen nur über ID!
2: Du mußt dich von der Optik in der GUI beim Datenbankdesign trennen! Die Daten werden/sollten via JOIN in der Query zusammengesetzt werden.
Zitat:
update war nicht erlaubt, wegen meiner Verknüpfungen bis auf die Kundentabelle mit der durfte ich weiterhin alles machen
...da hast du das erste Problem mit datensensitiven Controls. Datensätze die über einen JOIN abgrufen werden können nicht bearbeitet werden! Du mußt dich entscheiden. Entweder eine vernünftige Normalisierung oder datensensitive Controls. Beides geht nicht.
3: Tabellen erstellen mit jeweils einer ID Spalte mit dem PK drauf
Kunden,
Produkte
Einheiten
Zonen
4: Tabelle für die Positionen fehlt mit der ID für das Produkt
ID
AngebotsID // ID aus Angebote = Zuordnung zum Auftrag
ProduktID // ID des eigentlichen Produktes
Menge
5: Angebotstabelle:
ID // = pk
angebotsnummer
KundenID // ID aus der Kunden Tabelle statt kundennummer
ZonenID // ID aus der Zonentabelle
laufendenummer // gehört eigentlich in die Positionen? Oder?
bezeichnung // des Angebotes oder der Position?
// menge wird durch die Positionstabelle ersetzt
leistungsdatum
6: Daten laden in separaten Querys: Angebot, Positionen
7: Daten der Tabellen speichern in einer Transaktion

...wenn das so verstanden ist, dann gehts weiter mit FK usw.
Zitat:
Geht so etwas automatisch das wenn man in der Angebotstabelle z.B. unter Artikelbezeichnung einen Artikel eingibt, das in der Angebotstabelle automatisch beim E-Preis der Preis steht oder muss ich dann ein weiteres Query ausführen im Hintergrund welches mir den Preis zum Produkt ermittelt und dann in das vorgesehene Feld schreibt? Wäre auch z.B. auch wenn ich eine Artikelnummer eingebe die ich zufällig auswendig kenne das dann automatisch die Bezeichnung im Bezeichnunsfeld steht?
...später


Geändert von haentschman (18. Mai 2017 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Duisburg
402 Beiträge
 
Delphi 10 Seattle Architect
 
#3

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 08:27
Moin haentschman,
auch wenn das etwas durcheinander zu lesen ist, ich versuch das mal fix in Tabellen zu gießen nach deinem Vorbild und schmeiss am besten nachher mal ein Bild rein wie die Tabellen dann so aussehen....

Erstmal Danke dafür!
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Duisburg
402 Beiträge
 
Delphi 10 Seattle Architect
 
#4

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 08:53
So wie versprochen die angelegten Tabellen inkl. Feld Definitionen im Anhang

Zu Pos. 6 in deinem Beitrag meinst Du das?

Code:
SELECT
  *
FROM
  positionen
  INNER JOIN angebote ON positionen.angebotsID = angebote.angebotPK
Miniaturansicht angehängter Grafiken
tabellen.png   tabellen_feld_definitionen.png  

Geändert von stOrM (18. Mai 2017 um 08:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
3.616 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 08:57
Ich muß dich trösten... ich muß außer Haus. Was ich beim Überfliegen gesehen paßt soweit...
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Duisburg
402 Beiträge
 
Delphi 10 Seattle Architect
 
#6

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 08:58
Ich muß dich trösten... ich muß außer Haus. Was ich beim Überfliegen gesehen paßt soweit...
Kein Problem Du bist ja nicht mein persönlicher Problemlöser aber wäre schön wenn man sich später weiter damit befassen könnte, also mit den anderen Problemchen die ich damit noch habe...
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
1.899 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 10:11
Datensätze die über einen JOIN abgrufen werden können nicht bearbeitet werden! Du mußt dich entscheiden. Entweder eine vernünftige Normalisierung oder datensensitive Controls. Beides geht nicht.
Das halte ich für falsch. Es ist eine Frage der Vorgehensweise, der verwendeten Datenbank sowie der Komponenten.
Vielleicht noch etwas gesunder Menschenverstand dazu und alles ist gut.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.570 Beiträge
 
Delphi 7 Personal
 
#8

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 11:36
Dann erzähl mal was für ein Problem Du hast.
Moin haentschman,
auch wenn das etwas durcheinander zu lesen ist,
Was an Haentschmans Beitrag war denn durcheinander?

Datensätze die über einen JOIN abgrufen werden können nicht bearbeitet werden! Du mußt dich entscheiden. Entweder eine vernünftige Normalisierung oder datensensitive Controls. Beides geht nicht.
Das halte ich für falsch. Es ist eine Frage der Vorgehensweise, der verwendeten Datenbank sowie der Komponenten.
Vielleicht noch etwas gesunder Menschenverstand dazu und alles ist gut.
da mag ich Dir nicht pauschal wiedersprechen, aber das jetzt und hier zu diskutieren bringt stOrM erst einmal nicht weiter, denke ich.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten
sondern Deinen Anweisungen
Do it with Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Duisburg
402 Beiträge
 
Delphi 10 Seattle Architect
 
#9

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 12:19
Dann erzähl mal was für ein Problem Du hast.
Moin haentschman,
auch wenn das etwas durcheinander zu lesen ist,
Was an Haentschmans Beitrag war denn durcheinander?

Datensätze die über einen JOIN abgrufen werden können nicht bearbeitet werden! Du mußt dich entscheiden. Entweder eine vernünftige Normalisierung oder datensensitive Controls. Beides geht nicht.
Das halte ich für falsch. Es ist eine Frage der Vorgehensweise, der verwendeten Datenbank sowie der Komponenten.
Vielleicht noch etwas gesunder Menschenverstand dazu und alles ist gut.
da mag ich Dir nicht pauschal wiedersprechen, aber das jetzt und hier zu diskutieren bringt stOrM erst einmal nicht weiter, denke ich.

Gruß
K-H
Na ja, dass Problem ist, ich glaube Heanschman hat seinen Beitrag editiert?
Weil jetzt tauchen neue Dinge auf, die wir vorhin nicht hatten...

1. laufendenummer // gehört eigentlich in die Positionen? Oder?
2. bezeichnung // des Angebotes oder der Position?

1. Hab ich abgeändert.
2. Gute Frage, ich müsste ja wissen wo das hingehört oder ob das weg kann. Denn laut Heanschman hat die Tabelle Positionen kein Feld Bezeichnung oder ich lese es falsch.

Dort steht ja:

Zitat:
4: Tabelle für die Positionen fehlt mit der ID für das Produkt
ID
AngebotsID // ID aus Angebote = Zuordnung zum Auftrag
ProduktID // ID des eigentlichen Produktes
Menge
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
387 Beiträge
 
#10

AW: Wieder mal die Tabellenstrukturen

  Alt 18. Mai 2017, 12:39
Mal eine weitere Frage: Wie willst du z.B. bei Preisänderungen reagieren? So wie dein Datenmodell jetzt ist, würde eine Preisänderung die alten Angebote verändern.

Lösungsmöglichkeiten:

- Du lässt eine Änderung der Artikel nicht zu. Ggf. muss dann der alte Artikel auf inaktiv (Statusfeld) gesetzt werden und ein neuer Artikel angelegt werden.

- Du rückst etwas von der Normalform ab und übernimmst Felder wie Preis, Artikelbezeichnung etc. mit in die Position (als "Kopie"). Da könnte man es (sofern gewünscht) sogar ermöglichen, dass der Nutzer einen individuellen Preis eintippt.

- Du machst noch eine Tabelle Preise mit Von-Datum, Bis-Datum, Preis.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf