schildi: schnittmengen in db abbilden

hallo.

ich stehe grundsätzlich vor dem problem, dass ich schnittmengen in der db abbilden muss.
heisst:
es gibt eine gesamtmenge. diese kann beliebige mengen enthalten, welche sich überschneiden können.
leider ist mit der überschneidung ein nestedset-modell nicht mehr anwendbar, wenn ich nicht falsch liege.
ich habe so angefangen, dass ich eben viel mit fremdschlüsseln arbeite und so.. .
aber gibt es nicht eine möglichkeit sowas auch irgendwie doch in einen baum zu bekommen, oder einfacher zu gestalten als mit einigen tabellen u. fremdschlüsseln?

  1. Sup!

    Ich könnte jetzt datenbanktheoretische Überlegungen anstellen, aber das wäre sinnlos, denn Du könntest auch einfach selbst ein paar gute Bücher über Datenbanken lesen.

    Wenn Du einen konkreten Tipp willst, wäre es vielleicht besser, wenn Du ungefähr verrätst, um was für Daten und Teilmengen es geht, denn sonst kann man schlecht abschätzen, ob jetzt z.B. die Erweiterbarkeit und Flexibilität der Datenorganisation oder die Schnelligkeit der Datenabfrage wichtiger sind.

    Gruesse,

    Bio

    --
    Keep your friends close, but your enemies closer!
    1. hi bio,

      es geht um fonds (gesamtmenge).
      dabei ist es so, das beliebige fonds beliebige 'optionen' (eigenschaften) besitzen können (untermengen).

      ein fonds kann zb. vl-fähig sein oder nicht, oder zb. nur bei einer bestimmten fondsplattform (anbieter von fonds versch. fondsgesellschaften) sein.

      es soll auch sowas abgebildet werden:
      "bestimmte fonds sind vl-fähig, jedoch nur bei einer bestimmten fondsplattform."

      in diesem falle wäre würden sich 2 mengen überschneiden, nämlich einerseits die eigenschaft 'fondsplattform' u. andererseits die eigenschaft 'vl-fähig'.

      so kann es also auch zu mehrfach-überschneidungen kommmen.
      da fielen mir dann als abbildungsmöglichkeit (generell, unabh. von db) nur noch graphen ein. aber es gibt da doch bestimmt bessere abbildungsmöglichkeiten?

      momentan hab ichs eben mit joins gelöst... . aber als ich nochmal drüber nachgedacht hatte über eine allgemeinere möglichkeit der abbild. in der db, kam mir erst der baum (nestedset), was aber ja leider mit schnittmengen nicht geht, sondern nur mit verschachtelten mengen. aber es gibt für dieses problem ja sicher schon abbildungsmodelle findiger denker ;)

      1. Sup!

        Die Frage ist ja, ob die Eigenschaften sich (oft) ändern.

        Sonst könntest Du einfach eine Fonts-Tabelle machen, und jeder Font hat halt für alle denkbaren Eigenschaften eine Eigenschaft, d.h. ein Feld in seinem Font-Datensatz.
        Das wäre eine Lösung, die wahrscheinlich "schnell" wäre, aber eher schlecht zu warten.
        Die Alternative wäre, für jede Eigenschaft eine Tabelle zu haben, in der alle Fonts stehen, die diese Eigenschaft besitzen - so hast du es ja anscheinend gemacht.

        Haben willst Du ja anscheinend quasi vorgefertigte Teilmengen, also quasi "gespeicherte Suchen". Vieleicht kannst Du das mit Views oder anderen Mechanismen hin"faken". Ich glaube aber nicht, dass sich der Aufwand so richtig lohnt, solange Deine DB nicht am Rande ihrer Leistungsfähigkeit ist.

        Gruesse,

        Bio

        --
        Keep your friends close, but your enemies closer!
      2. es geht um fonds (gesamtmenge).
        dabei ist es so, das beliebige fonds beliebige 'optionen' (eigenschaften) besitzen können (untermengen).

        gut erkannt: attribut vl

        ein fonds kann zb. vl-fähig sein oder nicht, oder zb. nur bei einer bestimmten fondsplattform (anbieter von fonds versch. fondsgesellschaften) sein.

        nicht erkannt: ausprägung von vl (fondsplattform = anbieter von fonds versch. fondsgesellschaften)

        es soll auch sowas abgebildet werden:
        "bestimmte fonds sind vl-fähig, jedoch nur bei einer bestimmten fondsplattform."

        nicht erkannt: ausprägung von vl (fondsplattform = anbieter von fonds versch. fondsgesellschaften)

        in diesem falle wäre würden sich 2 mengen überschneiden, nämlich einerseits die eigenschaft 'fondsplattform' u. andererseits die eigenschaft 'vl-fähig'.

        da liegt dann auch der fehler: attribute und ausprägungen geben keine schnittmenge. nur attribut mit anderem attribut ergibt schnittmenge. die memnge der schnittmenge wird von den ausprägungen bestimmt.

        so kann es also auch zu mehrfach-überschneidungen kommmen.
        da fielen mir dann als abbildungsmöglichkeit (generell, unabh. von db) nur noch graphen ein. aber es gibt da doch bestimmt bessere abbildungsmöglichkeiten?

        ????????????

        momentan hab ichs eben mit joins gelöst... . aber als ich nochmal drüber nachgedacht hatte über eine allgemeinere möglichkeit der abbild. in der db, kam mir erst der baum (nestedset), was aber ja leider mit schnittmengen nicht geht, sondern nur mit verschachtelten mengen. aber es gibt für dieses problem ja sicher schon abbildungsmodelle findiger denker ;)

        joins sind völlig richtig !

        1. du sprichst ja noch von der "ausprägung", mm  - genauso hab ichs auch umgesetzt momentan. also die ausprägungen "fondsgesellscaft" oder "fondsplattform" habe ich getrennt von den attributen wie "vl-fähig".

          mm - dann hab ichs ja praktisch so gemacht "wie mans machen sollte" :).

          dachte einfach es geht noch besser, irgendeine optimale abbildung eben, die beliebig verschachtelbar wäre..

          ist halt stressig mit den ganzen gejointen abfragen :/ andauernd.

          hab zwar auch ne mysql klasse geschrieben die mir die abfragen nach vorgaben zusammenbaut, aber trotzdem ist es einfach aufwändig die ganzen abfrage-funktionen zu bauen.

          gibt es da eigentlich irgendwelche ideen, wie man das mehr automatiesieren kann?

          1. du sprichst ja noch von der "ausprägung", mm  - genauso hab ichs auch umgesetzt momentan. also die ausprägungen "fondsgesellscaft" oder "fondsplattform" habe ich getrennt von den attributen wie "vl-fähig".

            mm - dann hab ichs ja praktisch so gemacht "wie mans machen sollte" :).

            fondsgesellscaft ist sicherlich keine ausprägung. es kann sich nur um eine spalte handeln, in welcher die einzelnen gesellschaftsnamen stehen. gleiches scheint für fondsplattform zu gelten.

            mir scheinen die tabelle(n) falsch aufgebaut zu sein. wie sehen diese jetzt aus?

            offensichtlich ist ja vl-fähig nich nur vom fondsname, sondern auch nur  in verbindung mit bestimmten platformen abhängig.
            hier scheint eine separate tabelle 'vl-fähig' mit 2 spalten fonds und platform am sinnigsten, da ja wohl nur spezielle kombinationen erlaubt sind. ein vorhandener eintrag in dieser tabelle zeigt dann die vl-fähigkeit an.
            dazu ist diese separate tabelle mit der jetzigen zu joinen.

            1. ich habe das momentan etwa so gelöst (hier nur pk's bzw. zusammengesetzte pk's oder fk's hingeschr.):
              (isin == fund_id)

              funds [isin, [...]]
              options [option_id, [...]]

              fund_option_availability [option_id, isin, [...]]

              fund_companies [company_id, [...]]
              fund_platforms [platform_id, [...]]

              fund_platform_fund_availability [platform_id, isin]
              fund_company_fund_availability [company_id, isin]

              fund_company_option_availability [company_id, option_id, isin]
              fund_platform_option_availability [platform_id, option_id, isin]

  2. es gibt eine gesamtmenge. diese kann beliebige mengen enthalten, welche sich überschneiden können.
    leider ist mit der überschneidung ein nestedset-modell nicht mehr anwendbar, wenn ich nicht falsch liege.
    ich habe so angefangen, dass ich eben viel mit fremdschlüsseln arbeite und so.. .
    aber gibt es nicht eine möglichkeit sowas auch irgendwie doch in einen baum zu bekommen, oder einfacher zu gestalten als mit einigen tabellen u. fremdschlüsseln?

    sql-db's sind immer tabellen und somit 2-dimensional. baumstrukturen sind somit nicht direkt abbildbar. dies muß im programm erledigt werden. in einigen db-systemen sind rekursionen möglich. damit können dann direkt baumstrukturen erzeugt werden.

    schnittmengen sind allerdings leicht zu ermitteln, mit der einschränkung auf eine ebene. schnittmengen sind verknüpfungen (join) aus 2 tabellen. wenn du nun eine gesamttabelle mit den spalten aller aktuellen attribute hast, kannst du diese mit sich selbst verknüpfen und erhälst die schnittmenge.