Frage

Sind benutzerdefinierte Datentypen in SQL Server etwas, das ein Zwischen SQL-Benutzer kennen sollte und nutzen?

Was sind Vor-und Nachteile der Verwendung von UDTs?

War es hilfreich?

Lösung

Verwenden Sie niemals ihnen ist mein Rat. Sie sind in einer Welt des Schmerzes, wenn Sie jemals die Definition ändern. Vielleicht hat das mit den neueren Versionen mit mehr Vertrautheit da SQL Server 2000 und jemand verbessert können Ihnen sagen, ob es nun sicher ist, in dem Wasser zu bekommen, aber bis ich Bestätigung dafür hatte und es aus mich mit einem Test überprüft, ich wouldn ‚t es auf meinem Produktionssystem setzen.

Sehen Sie sich diese Frage für Details aus: Wie der Basistyp ändern ein UDT in SQL Server 2005?

Andere Tipps

ich nicht verwenden Code-basierte UDTs, weil ich glaube nicht, dass die zusätzliche Komplexität, die Vorteile garantiert. I tun verwenden T-SQL UDTs, weil es sehr wenig zusätzliche Komplexität ist so, dass die Vorteile der Mühe wert sind. (Dank Marc_s geht für den Hinweis auf, dass meine ursprüngliche Post war unvollständig!)

In Bezug auf Codebasierte UDTs

Denken auf diese Weise davon: wenn Ihr Projekt hat eine verwalteten Code-Komponente (App) und eine Datenbankkomponente (SQL Server), was echter Vorteil gewinnen Sie von der Definition verwalteten Code in der Datenbank? Durch meine Erfahrung? Keine.

Deployment ist schwieriger, weil Sie Baugruppen zu Ihrer DB Bereitstellung hinzufügen müssen und werden diese Baugruppen ändern, fügen Sie Dateien, etc. innerhalb von SQL Server. Sie werden auch auf der CLR in SQL Server aktivieren (nicht eine große Sache, aber niemand ist mir bewiesen, dass dies nicht eine Performance / Speicher-Strafe hat). Am Ende werden Sie haben genau das, was Sie gehabt haben würde, wenn man einfach das entworfen hatte in den Code Ihrer Anwendung. Es kann eine gewisse Leistungssteigerung, aber es fällt mir wirklich als ein Fall der vorzeitigen Optimierung - zumal ich weiß nicht, ob die Gesamt Leistung leidet aufgrund der CLR, die auf gegenüber off

.

Hinweis: Ich gehe davon aus, dass Sie SQL Server CLR würden mit Ihrer Art zu definieren. HLGEM spricht über SQL Server 2000, aber ich bin nicht vertraut mit den Jahren 2000 und meinte, sie hätte nur UDFs und nicht UDTs in extern definierten dlls (aber zitieren Sie mich nicht ... Ich bin wirklich nicht mit ihm vertraut!).

In Bezug auf T-SQL UDTs

T_SQL UDTs können allein in SQL definiert werden (gehen Sie zu "Programmierbarkeit | Typen | Benutzerdefinierte Datentypen" in SQL Server Management Studio). Für Standard-UDT I würde in der Tat wird empfohlen, sie zu meistern. Sie sind sehr leicht und können Ihre DDL mehr selbsterklärend machen und Integritätsbedingungen durchsetzen können. Zum Beispiel definiere ich einen „GenderType“ (char (1), keine Nullwerte enthalten, „M“ oder „F“ Betrieb), die, dass nur geeignete Daten gewährleistet, in dem Geschlecht Bereich erlaubt sind.

UDTs sind recht einfach, aber insgesamt dieser Artikel gibt ein ziemlich gutes Beispiel für wie es auf die nächste Stufe zu nehmen, indem sie eine Regel definieren, die Daten in Ihrem UDT erlaubt zu beschränken.

Als ich ursprünglich diese Frage antwortete ich auf die Idee, komplexe Code definierten Typen festgelegt wurde ( schmatzt Palme Stirn ). Also ... danke Marc.

Die Pro von benutzerdefinierten Typen ist ganz gut angesprochen von Alex Papadimoulis. Die Nachteile sind gut hier angegeben.

Ich möchte auch darauf hinweisen, dass die sp_bindrule Funktion veraltet ist, wie von Alex Beitrag zur Kenntnis genommen. Ich bin nicht sicher, wenn es veraltet war, aber es ist jetzt. In der Tat sind Regeln als Ganzes veraltet.

Wäre ich einen Typen mit einer Einschränkung schaffen zu wollen, würde ich mit einem benutzerdefinierten Tabellentyp mit einer Check-Einschränkung auf der entsprechende Spalte (n) in Betracht ziehen. Das gibt mir auch einen Weg, einen komplexen Datentyp zu bauen.

Ich kann nicht wirklich die Verwendung von SQL-Implementierung spezifischer Funktionen empfehlen, die es schwieriger machen, wenn Sie aus mssql wachsen und zu einem anderen dbms migrieren. Für unsere DWH dbs haben wir begonnen, auf MSSQL, migriert Oracle und haben seit dem letzten Jahr zu hp vertica absolviert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top