Benutzer mit den meisten Antworten
MSSQL Globale ID, wie realisieren?

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
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- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Juni 2012 15:47
-
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).aspxEinen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Juni 2012 15:47
Alle 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- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Juni 2012 15:47
-
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).aspxEinen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Juni 2012 15:47
-
Hallo Simons0n,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.