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
Seite 2 von 3     12 3      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#11

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

  Alt 23. Jul 2020, 11:41
Ich finde das Konzept der Eigenschaften schon zu schwammig und würde eher mit Merkmalen und Merkmalsausprägungen arbeiten.

Sonst erstelle ich einen roten Krug mit Eigenschaft zerbrechlich.
Der nächste erstellt einen roten Krug mit Eigenschaft unzerbrechlich und rund.
Kommt der dritte rote Krug und der User wählt aus den ja jetzt angelegten Eigenschaften zerbrechlich und unzerbrechlich aus und du hast ein fragwürdiges Objekt.
Ralph
  Mit Zitat antworten Zitat
jobo

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

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

  Alt 23. Jul 2020, 19:07
Zitat:
Trigger und Constraints wurden ja schon genannt..
Lustig, es wurde ja nun fast alles genannt, was eine Lösung für irgendein Datenbank Problem sein könnte.
Bin gespannt, was noch so dazu kommt bis der TE sich meldet.
(falls er sich meldet)
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#13

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

  Alt 24. Jul 2020, 12:19
Über constraint oder besser (bi) Trigger
Danke an alle für die Antworten. Wie würden den eine Constraint oder Trigger aussehen? Stehe da gerade etwas auf dem Schlauch...
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 24. Jul 2020, 12:22
Zunächst:
Das Unique auf Größe und Farbe ergibt keinen Sinn
Jup, eine Altlast. Kann und muss weg.

Am Ende machst Du auf Deine M:N Tabelle einen PK auf die beiden FK zu Gegenstand und Eigenschaft und das sollte dann okay sein.
Hab mir den Satz jetzt mehrfach durchgelesen: Habe ich das nicht schon gemacht oder verstehe ich den Satz falsch?
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 24. Jul 2020, 12:24
Es kommt darauf an, was er gemeint hat. Dieser Index verhindert, dass ein Gegenstand eine Eigenschaft mehrfach zugeordnet wird, aber nicht mehrere gleichartige Gegenstände.
Zu erst möchte ich gleichartige Gegenstände verhindern. Wenn man dann auch noch verhindern kann, dass eine Eigenschaft dem selben Gegenstand mehrfach zugeordet wird, ist das noch besser.

Geändert von BlueStarHH (24. Jul 2020 um 12:29 Uhr)
  Mit Zitat antworten Zitat
jobo

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

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

  Alt 24. Jul 2020, 20:52
Am Ende machst Du auf Deine M:N Tabelle einen PK auf die beiden FK zu Gegenstand und Eigenschaft und das sollte dann okay sein.
Hab mir den Satz jetzt mehrfach durchgelesen: Habe ich das nicht schon gemacht oder verstehe ich den Satz falsch?


Hier eine detailiertere Formulierung:
Du legst auf Deine M:N Verbindungstabelle "GegenstandEigenschaft" einen Primärschlüssel auf die beiden Fremdschlüssel, die auf Gegenstand und Eigenschaft zeigen.
Das sollte alles sein.

Als SQL:
Code:
 
create table GegenstandEigenschaft(
  GegenstandID bigint ,
  EigenschaftID bigint );

alter table GegenstandEigenschaft ADD PRIMARY KEY (GegenstandID,EigenschaftID );

alter table GegenstandEigenschaft ADD foreign KEY (GegenstandID) references Gegenstand(GegenstandID);
alter table GegenstandEigenschaft ADD foreign KEY (EigenschaftID ) references Eigenschaft(EigenschaftID );
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#17

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

  Alt 27. Jul 2020, 09:28
Als SQL:
Code:
 
create table GegenstandEigenschaft(
  GegenstandID bigint ,
  EigenschaftID bigint );

alter table GegenstandEigenschaft ADD PRIMARY KEY (GegenstandID,EigenschaftID );

alter table GegenstandEigenschaft ADD foreign KEY (GegenstandID) references Gegenstand(GegenstandID);
alter table GegenstandEigenschaft ADD foreign KEY (EigenschaftID ) references Eigenschaft(EigenschaftID );
Genau das habe ich schon gemacht. Siehe mein Eingangspost, da ist das sehr verkürzt mit PK (PRIMARY KEY) und FK (Foreign KEY) dargestellt:

Code:
GegenstandEigenschaft
---------------------
PK FK GegenstandID integer
PK FK EigenschaftID integer
Hilft mir aber nicht mein Problem vollständig zu lösen. Trigger oder Contraints sind wohl doch noch zusätzlich nötig... Hat jemand ein Beispeil wie ein Trigger oder Contraints für meinen Anwendungsfall aussehen könnte? Danke!
  Mit Zitat antworten Zitat
jobo

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

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: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#19

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.415 Beiträge
 
Delphi 7 Professional
 
#20

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
Antwort Antwort
Seite 2 von 3     12 3      


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 00:05 Uhr.
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