![]() |
Datenbank: MS-SQL • Version: 2000
Abfrage (Filter) bei einer n:m Relation
Hai ihr,
irgendwie habe ich eine Blockade :oops: 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.:
Code:
Aber wie suche ich jetzt z.B alle Immobilien heraus bei dennen ETW = True und Balkon = True ist?
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 Irgendwie sehe ich den Wald vor lauter Bäumen mal wieder nicht :wall: Oder sollte ich das ganze mit einem anderen Ansatz lösen? |
Re: Abfrage (Filter) bei einer n:m Relation
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:
Grüße vom marabu
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) */ ... |
Re: Abfrage (Filter) bei einer n:m Relation
Hai marabu,
Zitat:
Ich versuche schon seit Tagen den Kunden zu überzeugen das es eigentlich so ist das es
Aber das nur am Rande. Zitat:
Zitat:
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. |
Re: Abfrage (Filter) bei einer n:m Relation
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. |
Re: Abfrage (Filter) bei einer n:m Relation
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. |
Re: Abfrage (Filter) bei einer n:m Relation
Statt Integer, kannst du ja auch ein varchar nehmen, von beliebiger Länge. Da hast du dann noch mehr Möglichkeiten wie 4x32
|
Re: Abfrage (Filter) bei einer n:m Relation
Zitat:
Die Bitoperationen kannst du ja in einer UDF selbst erledigen. |
Re: Abfrage (Filter) bei einer n:m Relation
Zitat:
|
Re: Abfrage (Filter) bei einer n:m Relation
Zitat:
Zitat:
marabu |
Re: Abfrage (Filter) bei einer n:m Relation
Zitat:
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 ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 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 by Thomas Breitkreuz