AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage (Filter) bei einer n:m Relation
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage (Filter) bei einer n:m Relation

Ein Thema von Sharky · begonnen am 12. Aug 2005 · letzter Beitrag vom 12. Aug 2005
Antwort Antwort
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#1

Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 10:55
Datenbank: MS-SQL • Version: 2000
Hai ihr,

irgendwie habe ich eine Blockade

Ich erstelle eben ein Programm für Immobilienmakler. Mit diesem möchten sie ihre Immobilien verwalten (überraschung).
Von den Anwendern kann eine Liste mit "Eigenschaften" erstellt werden.
z.B.:
  • ETW
  • EFH
  • MFH
  • Balkon
Bei jeder Immobilie kann nun (mit Checkboxen) angegeben werden welche der Eigenschaften auf diese zutrifft. So weit ja kein Problem. Ich benutze dafür einfach drei Tabellen.
Code:
TB_Immo
ID : Integer (PK)
name : string

TB_Eigenschaf
ID : Integer (PK)
name : string

TB_Immo_Eigenschaft
Immo_ID : FK -> TB_Immo.ID
Eigenschaft_ID : FD -> TB_Eingeschaft.ID
Aber wie suche ich jetzt z.B alle Immobilien heraus bei dennen ETW = True und Balkon = True ist?

Irgendwie sehe ich den Wald vor lauter Bäumen mal wieder nicht

Oder sollte ich das ganze mit einem anderen Ansatz lösen?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 11:20
Hi Sharky,

von der E/R-Modellierung her sollte da eine Gen-Spec-Beziehung rauskommen. ETW und MFH sind keine Eigenschaften, wie z.B. Balkon, sondern Spezialisierungen von Immobolie. Die allgemeinen Eigenschaften sehe ich als direkte Attribute, aber du willst dem Kunden durch deine Eigenschaftstabelle sicher eine Erweiterung der Attributmenge ermöglichen. Das dadurch variable Statement musst du dann zur Laufzeit erzeugen:

SQL-Code:
SELECT * FROM tb_immo
WHERE EXISTS (SELECT * FROM tb_immo_eigenschaft WHERE immo_id = id AND eigenschaft_id = :prop1)
AND EXISTS (SELECT * FROM tb_immo_eigenschaft WHERE immo_id = id AND eigenschaft_id = :prop2)
/* AND EXISTS (SELECT * FROM tb_immo_eigenschaft WHERE immo_id = id AND eigenschaft_id = :prop3) */
...
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 11:27
Hai marabu,

Zitat von marabu:
...ETW und MFH sind keine Eigenschaften, wie z.B. Balkon, sondern Spezialisierungen von Immobolie.
Du weisst das, ich weiss das ... aber versuche das mal jemandem klar zu machen der dies bis jetzt mit den "Kategorien" von Outlook gemacht hat

Ich versuche schon seit Tagen den Kunden zu überzeugen das es eigentlich so ist das es
  • Spezialisierungen gibt (welche sich gegenseitig ausschliessen)
  • Eingeschaften die zusätzlich vorhanden sind

Aber das nur am Rande.

Zitat:
.. sicher eine Erweiterung der Attributmenge ermöglichen.
Jup. So soll es sein.

Zitat:
Das dadurch variable Statement musst du dann zur Laufzeit erzeugen:
Mist, ich habe es befürchtet

Ich könnte jetzt natürlich anstelle der n:m-Tabelle (TB_Immo_Eigenschaft) die "Eigenschaften" in einem Feld der Immobilien speichern. Aber irgendwie geht mir das gegen den Strich.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 11:34
Alternativ könntest du eine bitweise Verknüpfung deiner Attribute setzen. Da es sich ja nur um Checkboxen handelt, gibt es dazu nur 2 Zustände, gesetzt oder nicht gesetzt, rsp. 1 oder 0.

Wenn du als Spaltentyp "int" wählst, so sind dies immerhin 4 byte, also 32 bit. Damit kannst du also 32 Zustände in einem Wert speichern. Zum bequemen Suchen nachher in der DB kannst du dir noch eine schön Funktion im MSSQL schreiben, und die Sache ist geritzt. Und du bleibst, bis zu einem gewissen Grade, flexibel, wenn es darum geht, weitere Attribute aufzunehmen.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 12:25
Hai Jelly,

das wäre eine Überlegung wert. Ich könnte ja in der Tabelle 4 Integer-Felder für diesen Zweck bereitstellen. Damit wäre halt die Anzahl der "Attribute" auf 128 beschränkt. Aber damit kann der Kunde bestimmt leben.
Der Vorteil wäre auch das ich unabhängiger von einem bestimmten DB-System bin. In diesem Fall muss es "nur noch" Bitoperationen in der WHRE-Abfrage können.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 12:35
Statt Integer, kannst du ja auch ein varchar nehmen, von beliebiger Länge. Da hast du dann noch mehr Möglichkeiten wie 4x32
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 12:36
Zitat von Sharky:
In diesem Fall muss es "nur noch" Bitoperationen in der WHRE-Abfrage können.
Noch ein Nachtrag...

Die Bitoperationen kannst du ja in einer UDF selbst erledigen.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#8

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 12:44
Zitat von Sharky:
...Ich versuche schon seit Tagen den Kunden zu überzeugen das es eigentlich so ist das es
  • Spezialisierungen gibt (welche sich gegenseitig ausschliessen)
  • Eingeschaften die zusätzlich vorhanden sind

Aber das nur am Rande.
nur mal so nebenbei wegen dem gegenseitigem Ausschluss, eine ETW ist eine Untermenege eines MFH, daher können diese "Eigenschaften" sich nicht ausschliessen!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 14:56
Zitat von jelly:
Da es sich ja nur um Checkboxen handelt, gibt es dazu nur 2 Zustände, gesetzt oder nicht gesetzt, rsp. 1 oder 0.
Ein Bitvektor ist eine feine Sache, aber "Bäder=2" wäre eine geläufige Ausnahme von der Regel und ich bin nicht sicher, ob ich ohne Not mehrere Lösungsansätze im gleichen Programm mischen würde.

Zitat von ibp:
eine ETW ist eine Untermenge eines MFH
Vorsicht - das gilt nicht in diesem Kontext. Es geht hier um Immobilienobjekte. Die ETW kann ein Objekt im Portfolio des Maklers sein, das enthaltende MFH steht da noch nicht zur Debatte.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Abfrage (Filter) bei einer n:m Relation

  Alt 12. Aug 2005, 15:07
Zitat von marabu:
... Ein Bitvektor ist eine feine Sache, aber "Bäder=2" wäre eine geläufige Ausnahme von der Regel und ich bin nicht sicher, ob ich ohne Not mehrere Lösungsansätze im gleichen Programm mischen würde....
In diesem Fall ist das mit der "Anzahl" nicht wichtig. Diese Information ist fest bei der Immobilie hinterlegt. Dafür gibt es feste Felder in der Tabelle (genauso wie: Balkon, Fläche, usw).

Es geht nur um die "Eigenschaften" einer Immobilie die nicht Standardmässig vorhanden sind und darum vom Anwender selber angelegt werden können. 80% bis 90% aller Informationen sind ja vorgegeben.

Darum denke ich das ich mit diesem "Bitvektor" *g* arbeiten kann.


BTW: Wie marabu richtig erkannte ist eine Immobilie entweder eine ETW oder ein MFH. Das die ETW in einem MFH sein kann ist in diesem Fall nicht entscheidend
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  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 08:14 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