Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wieder mal die Tabellenstrukturen (https://www.delphipraxis.net/192769-wieder-mal-die-tabellenstrukturen.html)

stOrM 18. Mai 2017 06:53

Datenbank: MySQL • Version: 5.7 • Zugriff über: Unidac

Wieder mal die Tabellenstrukturen
 
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?

haentschman 18. Mai 2017 08:01

AW: Wieder mal die Tabellenstrukturen
 
Moin...:P
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

:wink:

stOrM 18. Mai 2017 08:27

AW: Wieder mal die Tabellenstrukturen
 
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!

stOrM 18. Mai 2017 08:53

AW: Wieder mal die Tabellenstrukturen
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

haentschman 18. Mai 2017 08:57

AW: Wieder mal die Tabellenstrukturen
 
Ich muß dich trösten... ich muß außer Haus. Was ich beim Überfliegen gesehen paßt soweit...:P

stOrM 18. Mai 2017 08:58

AW: Wieder mal die Tabellenstrukturen
 
Zitat:

Zitat von haentschman (Beitrag 1371835)
Ich muß dich trösten... ich muß außer Haus. Was ich beim Überfliegen gesehen paßt soweit...:P

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...

jobo 18. Mai 2017 10:11

AW: Wieder mal die Tabellenstrukturen
 
Zitat:

Zitat von haentschman (Beitrag 1371819)
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.

p80286 18. Mai 2017 11:36

AW: Wieder mal die Tabellenstrukturen
 
Dann erzähl mal was für ein Problem Du hast.
Zitat:

Zitat von stOrM (Beitrag 1371824)
Moin haentschman,
auch wenn das etwas durcheinander zu lesen ist,

Was an Haentschmans Beitrag war denn durcheinander?

Zitat:

Zitat von jobo (Beitrag 1371866)
Zitat:

Zitat von haentschman (Beitrag 1371819)
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

stOrM 18. Mai 2017 12:19

AW: Wieder mal die Tabellenstrukturen
 
Zitat:

Zitat von p80286 (Beitrag 1371882)
Dann erzähl mal was für ein Problem Du hast.
Zitat:

Zitat von stOrM (Beitrag 1371824)
Moin haentschman,
auch wenn das etwas durcheinander zu lesen ist,

Was an Haentschmans Beitrag war denn durcheinander?

Zitat:

Zitat von jobo (Beitrag 1371866)
Zitat:

Zitat von haentschman (Beitrag 1371819)
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

Olli73 18. Mai 2017 12:39

AW: Wieder mal die Tabellenstrukturen
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz