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 1 von 2  1 2      
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 22. Jul 2020, 17:36
Zunächst:
Das Unique auf Größe und Farbe ergibt keinen Sinn oder soll wirklich jede Farbe und Größe für sich nur einmalig in der ganzen Tabelle auftauchen?
Dann sind Größe und Farbe auch Eigenschaften und können/sollten dort mit aufgenommen werden.

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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Jul 2020, 17:50
Es gibt DBMS die erlauben in den Indizes auch Funktionen und Formeln. (bzw. k.A. ob Einige sowas nicht erlauben/können)

SQL-Code:
create unique index ix_uni_GegenstandEigenschaft on GegenstandEigenschaft (GegenstandID, EigenschaftID <> '');

-- bzw. (wobei, da GegenstandEigenschaft.EigenschaftID NOT NULL ist, kürzt sich das raus)
create unique index ix_uni_GegenstandEigenschaft on GegenstandEigenschaft (GegenstandID, EigenschaftID IS NOT NULL);
create unique index ix_uni_GegenstandEigenschaft on GegenstandEigenschaft (GegenstandID, true);
create unique index ix_uni_GegenstandEigenschaft on GegenstandEigenschaft (GegenstandID);
also jeder Gegenstand kann in GegenstandEigenschaft mit nur jeweils einer Eigenschaft vorkommen,
quasi so als wenn man man in der Tabelle Gegenstand ein Feld EigenschaftID hätte, wo man nur einwas rein bekommt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 22. Jul 2020, 17:55
Nennt man "Expression Index"

https://firebirdsql.org/rlsnotesh/in...xpression.html
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 23. Jul 2020, 08:19
Trigger und Constraints wurden ja schon genannt.

Variante:
Du kannst die einzelnen EigenschaftIDs eines Gegenstands in formatierte Strings umwandeln (zB "001", "004", "099", etc) und zu einem String zusammenbauen: "001002099".
Haben zwei Gegenstände idente Strings, haben sie gleiche Eigenschaften.
  Mit Zitat antworten Zitat
Jumpy

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

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
 
#6

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: Hamburg
868 Beiträge
 
Delphi 11 Alexandria
 
#7

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
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 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: Hamburg
868 Beiträge
 
Delphi 11 Alexandria
 
#9

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
 
#10

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


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 14:37 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