none
MSSQL Globale ID, wie realisieren? RRS feed

  • Frage

  • Hallo Forum,

    ich habe folgende Problematik:

    Ich möchte aus einer Datenbank nach Namen verschiedene Orte auswählen. Dabei wird der DB Klasse ein String übergeben, mit dem sie nach den Ortsnamen sucht. Dabei gibt es verschiedene Orte, z.b. Gebäude und Räume, die beide Namen haben, aber in verschiedenen Tabellen gespeichert sind. Nun ist das Problem, dass ich am liebsten per ID auf diese Datensätze zugreifen wollen würde, also mir eine Methode getOrtByID(int id) schreibe, die dann anhand der ID sofort weiß, in welcher Datenbank sie suchen muss. Ohne eine globale ID geht das leider nicht, ohne vorher zu wissen, aus welcher Tabelle die ID kam.

    Meine Idee war es, eine Tabelle zu machen, die allgemein ORTE heißt und für jeden unterschiedlichen Ort eine Spalte mit der ID hat. Und dazu dann einen Primärschlüssel, über den ich suchen möchte. Zum Beispiel könnten Spalten sein: globalID, gebäudID, raumID. Und für Gebäude Mensa, mit ID 1 wäre der Eintrag dann: globalID = 1, gebäudeID = 1, raumID = null oder für Raum Sekretariat: global ID = 2, gebäudeID = null, raumID = 1

    Aber das kommt mir sehr hässlich vor. Gibt es da irgend eine schlauerer Variante, wie ich meine Datensätze global ganz gezielt ansprechen kann? Mir fällt einfach nichts sinnvolles ein und Google spuckt da auch nichts dazu aus...

    Gruß

    Simon

    Dienstag, 22. Mai 2012 15:59

Antworten

  • Hallo Simon,

    so ganz habe ich es noch nicht verstanden, aber es hört sich so an, als würde es in Richtung Data Sharding gehen, also Daten horizontal über mehrere Datenbank zu partitionieren, nur das es hier nicht um eine Entität geht, sondern über mehrere.

    Wenn Du eine feste Anzahl an unterschiedliche Tabellen hast, könntest Du die IDs so vergeben, das z.B. über die letzte Stelle je Tabelle einen festen Wert hat. Also z.B. die IDs enden immer mit einer 1, für Gebäude mit 2 usw. Das kannst Du über IDENTITY lösen, also Ort bekommt Identity(1, 10), Gebäude(2, 10) usw. Die IDs werden automatisch um 10er Werte hochgezählt.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 22. Mai 2012 16:40
  • Hallo Simon,
    aus Deiner Frage geht nicht ganz klar hervor, ob es nun verschiedene Tabellen oder verschiedene Datenbanken sind.
    Ich könnte mir zum einen vorstellen, eine gemeinsame Tabelle (anstelle der einzelnen Tabellen) zu führen, die ein Kennzeichen für die Art des Objektes (Raum, Gebäude) hat, oder die Verwendung einer indizierten Sicht über mehrere Tabellen. Damit benötigst Du nicht mehr die Information, aus welcher Tabelle die Daten stammen. Der zweite Zugriff über die ID ist dann nicht mehr notwendig.

    Informationen zu indizierten Sichten findest Du z. B. hier:
    http://msdn.microsoft.com/de-de/library/ms187864(v=sql.105).aspx

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    Mittwoch, 23. Mai 2012 07:20

Alle Antworten