2009-06-30 11 views
0

Ist es möglich, eine Beziehung von einer Benutzertabelle zu einem System Tabelle anzuzeigen? Um einen Zusammenhang zu geben, möchte ich die Werte einer Spalte in einer meiner Tabellen auf die Spaltennamen einer anderen meiner Tabellen eingeschränkt werden, die am einfachsten zu tun scheint durch die Systemansicht, die die Spalte beherbergt Namen der zweiten Tabelle.Können Sie Beziehungen zu Systemtabellen/Sichten haben?

Also, mit dem klassischen Beispiel, wenn ich eine Tabelle von Kunden (Vorname Nachname) hätte, möchte ich eine andere Tabelle erstellen, die eine Spalte "customerAttribute" hatte, die nur "Vorname" oder "Nachname" sein könnte Um dies dynamisch zu halten, wäre es nett, wenn die "customerAttribute" -Spalte tatsächlich ein Fremdschlüssel aus der Systemansicht wäre, der die Namen der Spalten in der Customer-Tabelle speichert; Auf diese Weise muss ich mich nicht um Datenintegritätsprobleme kümmern, da Spalten in der tatsächlichen Customers-Tabelle hinzugefügt, gelöscht und umbenannt werden.

Ich habe keine einfache Möglichkeit gesehen, diese Beziehung in SQL Server zu erstellen, also frage ich mich, ob ein Durcheinander mit/Erstellen von Beziehungen mit Systemtabellen und/oder Sichten ein großes Nein ist.

Danke!

P.S. Ich stelle diese Frage, um mir zu helfen, another problem zu lösen, die ich auf SO gepostet habe.

Bearbeiten: Auch wenn Sie nicht direkt eine Beziehung zu einer Systemansicht erstellen können, könnten Sie möglicherweise eine Ansicht erstellen, die die Abfrage an die Systemansicht zurückgegeben (um die Spaltennamen zu erhalten) und dann eine Beziehung zu dieser Ansicht hergestellt. Ich werde es jetzt versuchen.

+0

Ich hoffe, dass ich nie an einem solchen System arbeiten muss. –

+0

Kannst du aber ich weiß nicht ob es legal ist;) Sorry könnte nicht widerstehen – Janusz

Antwort

2

Es gibt offensichtlich nichts, was Sie daran hindern könnte, eine Benutzertabellenspalte zu erstellen, die auf eine Systemtabellenspalte verweist. Also die offensichtliche Antwort ist ja. Um Ihre eigentliche Frage zu beantworten, müssen Sie eine andere Frage stellen, nämlich: Ist es eine gute Idee, Metadaten in Benutzertabellen zu speichern?

Wenn ich aus der Sicht des Datenmanagement-Puristen antworte, würde ich sagen, dass dies fast immer eine schlechte Idee ist. Aus praktischen Gründen habe ich es jedoch getan, obwohl ich nicht stolz darauf bin. Es gibt einige Ergebnisse, die Sie erzielen können, wenn Sie Daten und Metadaten, die fast unmöglich zu erreichen sind, miteinander mischen, ohne sie zu mischen.

Das Risiko, das Sie eingehen, besteht darin, dass Sie letztendlich eine Datenbank erhalten, die nicht in Bezug auf Attribute dokumentiert werden kann, die für Fachexperten sinnvoll sind. Mit anderen Worten, Ihre Datenbank wird nur von Ihnen und Ihren Geeks benutzt werden können. Manchmal ist das ein akzeptables Risiko. Manchmal ist es nicht.

0

Ich bin mir nicht sicher, ob es überhaupt möglich ist, aber wenn es dann ist, dann treten Sie sicherlich auf gefährlichen Boden ... Wie würden Sie eine Säule umbenennen? Wie würdest du eine Säule bewegen? Wie würden Sie Spalten löschen? Diese Art von Ding würde wahrscheinlich viel in SSMS brechen. Diese Art der Sache wird besser mit einem Trigger oder in Ihrer Code-Logik behandelt.

1

Abhängigkeiten von den Systemtabellen sind immer eine schlechte Idee, da MS sie ohne Warnung ändern können. Warum nicht die information schema views verwenden, die portabel sein sollen und Anwendungen unterstützen, die Metadaten abfragen müssen?

+0

Das ist in Ordnung, und eigentlich wahrscheinlich was ich will jetzt, dass ich es weiter betrachte. Aber ist es schlecht, Abhängigkeiten zu den Ansichten hinzuzufügen? Oder ist das akzeptabel? – JoeCool

+0

Ich denke, es ist akzeptabel.Die Alternative war in der Vergangenheit, eigene "Metadaten" -Tabellen zu pflegen, was natürlich albern ist, wenn standardisierte Einrichtungen wie das Info-Schema verfügbar sind. –

+0

Es ist nur dumm, wenn Sie sie besitzen. In diesem Fall besitzt Microsoft sie. (Ich weiß, es gibt einen Standard. Und natürlich, Microsoft wird nie kreuzweise mit Standards.) – dkretz

Verwandte Themen