AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Doppelte Datensätze verhindern in 1:N-Verknüpfung
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Datensätze verhindern in 1:N-Verknüpfung

Ein Thema von BlueStarHH · begonnen am 22. Jul 2020 · letzter Beitrag vom 30. Jul 2020
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 17:01
Oh sorry, dann verstehe ich Dein Problem nicht.
Meiner Meinung nach löst mein Vorschlag Deine Probleme.
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
865 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 17:59
Oh sorry, dann verstehe ich Dein Problem nicht.
Meiner Meinung nach löst mein Vorschlag Deine Probleme.
Dann gebe ich mal ein Beispiel um das zu verdeutlichen:

Code:
Gegenstand
----------
GegenstandID Groesse Farbe
1             50x90    weiß
2             XL      blau
3             XL      blau            



Eigenschaft
-----------
EigenschaftID Name
1              brennbar
2              zerbrechlich


GegenstandEigenschaft
---------------------
GegenstandID EigenschaftID
1             2
2             1
3             1
Das zusammengejoint ergibt dann:

Code:
GegenstandID Groesse Farbe Eigenschaft
1             50x90    weiß   zerbrechlich
2             XL      blau  brennbar
3             XL      blau  brennbar
Einfach zu sehen, dass die letzten beiden Datensätze doppelt sind. Kein PK und FK haben das verhindert. Das darf nicht sein.

In Tabelle "Gegenstand" muss es möglich sein, bis auf die ID gleiche Datensätze anzulegen, da sie ja unterschiedlich Eigenschaften haben könnten. Also sowas sollte möglich sein:

Code:
GegenstandID Groesse Farbe Eigenschaft
1             50x90    weiß   zerbrechlich
2             XL      blau  leicht, ...
3             XL      blau  lang, ...

Geändert von BlueStarHH (27. Jul 2020 um 18:01 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#3

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 18:16
Wären diese Daten aus einer Tabelle,
Code:
GegenstandID Groesse Farbe Eigenschaft
1             50x90    weiß   zerbrechlich
2             XL     blau brennbar
3             XL     blau brennbar
würdest Du also einen Index der Form create unique index ix_Groesse_Farbe_Eigenschaft on tabelle (Groesse, Farbe, Eigenschaft); benötigen.

Da es sich aber um zwei Tabellen handelt, brauchst Du eine entsprechende "tabellenübergreifende" Lösung.

Hab' ich das so (in etwa) richtig verstanden?
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
865 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 18:20
Wären diese Daten aus einer Tabelle,
Code:
GegenstandID Groesse Farbe Eigenschaft
1             50x90    weiß   zerbrechlich
2             XL     blau brennbar
3             XL     blau brennbar
würdest Du also einen Index der Form create unique index ix_Groesse_Farbe_Eigenschaft on tabelle (Groesse, Farbe, Eigenschaft); benötigen.

Da es sich aber um zwei Tabellen handelt, brauchst Du eine entsprechende "tabellenübergreifende" Lösung.

Hab' ich das so (in etwa) richtig verstanden?
Ja, richtig! Wobei noch wichtig ist, dass es durch die Drei-Tabellen-Lösung mehr als eine Eigenschaft pro Gegenstand geben könnte und können soll.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 19:33
Wie geht das mit dem bisher geforderten übernander?

Würden die Beispieldaten aus #20 mit dem genannten unique Index aus #20 überhaupt existieren?

Wie wär es, wenn BluestarHH mal positive und negative Beispiel aufführt, um sein Problem plastischer zu machen?
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
865 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 27. Jul 2020, 19:51
Wie geht das mit dem bisher geforderten übernander?
Wo siehst Du einen Wiederspruch? Evtl. Post #20 falsch verstanden?

Würden die Beispieldaten aus #20 mit dem genannten unique Index aus #20 überhaupt existieren?
Nein, würden sie nicht. Ich hab den Ersteller von #20 auch nicht so verstanden. (Könnte man aber leicht). Die Verwirrung war nur seinem Copy&Paste meiner Beispieldaten geschuldet. Streiche einfach das Beispiel aus Post #20 dann stimmt die Aussage mit dem Index trotzdem. Also nochmal deutlich : In einer Tabelle würde ich es mit einem Index wie diesem lösen:
create unique index ix_Groesse_Farbe_Eigenschaft on tabelle (Groesse, Farbe, Eigenschaft)
Das geht bei mir aber nicht, da ich 3 Tabellen habe und haben muss.

Ein positiv und negativ Beispiel findest Du in #19.

Geändert von BlueStarHH (27. Jul 2020 um 19:58 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#7

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 28. Jul 2020, 08:03
Bei dem von mir vorgeschlagenen Index würde die dritte Zeile im Beispiel zu einer Indexverletzung führen und wäre somit nicht möglich.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Doppelte Datensätze verhindern in 1:N-Verknüpfung

  Alt 30. Jul 2020, 17:32
Evtl. Post #20 falsch verstanden?

Würden die Beispieldaten aus #20 mit dem genannten unique Index aus #20 überhaupt existieren?
Nein, würden sie nicht.
..
Ein positiv und negativ Beispiel findest Du in #19.
Ja, anders verstanden. In Post 20 steht nirgends, dass die dargestellte Kombination nicht funktionieren soll. Sondern dass hier unerwünschte Daten stehen, die mittels des Index verhindert werden sollen.

Aber wie auch immer, ich hab's endlich kapiert, sorry.
Wenn unter keinen Umständen das bestehende System verändert, sondern nur erweitert werden soll, ja dann muss man häßliche Dinge machen mit Triggern.

Ich würde wie eingangs vorgeschlagen die Farbe und Größe mit in die Eigenschaften übernehmen. Falls der Erhalt als "Originalspalte" unabdingbar ist, würde ich das per View einblenden.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz