2009-05-20 13 views
14

sqlite verwendet etwas, was die Autoren "" nennen, was im Grunde bedeutet, dass sqlite dynamisch typisiert wird: Sie können einen varchar-Wert in einer "int" -Spalte speichern, wenn Sie möchten.Wann ist die Manifest-Typisierung von sqlite nützlich?

Dies ist eine interessante Designentscheidung, aber wann immer ich sqlite benutzt habe, habe ich es wie ein Standard-RDMS verwendet und die Typen behandelt, als wären sie statisch. Tatsächlich habe ich mir beim Entwurf von Datenbanken in anderen Systemen niemals dynamisch geschriebene Spalten gewünscht.

Also, wann ist diese Funktion nützlich? Hat jemand in der Praxis einen Nutzen dafür gefunden, der mit statisch getippten Spalten nicht so einfach hätte erledigt werden können?

Antwort

5

Es macht nur Typen einfacher zu bedienen. Sie müssen sich keine Gedanken darüber machen, wie groß dieses Feld auf Datenbankebene sein muss oder wie viele Diggets Ihre Interger sein können. Mehr oder weniger ist es ein "warum nicht?" Ding. Auf der anderen Seite ermöglicht die statische Typisierung in SQL Server dem System, in einigen Fällen viel besser zu suchen und zu indizieren, aber für die Hälfte aller Anwendungen bezweifle ich, dass Verbesserungen der Datenbankperformance von Bedeutung sind, oder ihre Leistung ist ". schlecht 'aus anderen Gründen (temporäre Tabellen werden bei jeder Auswahl, Exponentialauswahl usw. erstellt).

Ich benutze SqLite die ganze Zeit für meine .NET-Projekte als Client-Cache, weil es einfach zu einfach zu benutzen ist. Nun, wenn sie nur GUIDs wie SQL Server benutzen können, wäre ich ein glücklicher Camper.

+2

Das ist ein guter Punkt, zB dass Varchar-Felder nicht länger auf eine bestimmte Anzahl von Zeichen beschränkt sind, was mich schon immer an traditionellen RDMSs gestört hat. –

+0

Ich dachte, es gäbe mindestens ein paar andere "Antworten" neben meiner. Dies ist nur ein weiterer Beweis dafür, dass wir SqLite.NET mehr da draußen haben müssen. Es ist SO einfach zu verwenden und an Orten einzusetzen, an denen Sie * SQL Server oder Express * nicht benötigen. – JasonRShaver

4

Dynamische Eingabe ist nützlich, um Dinge wie Konfigurationseinstellungen zu speichern. Nehmen Sie zum Beispiel die Windows-Registrierung. Jeder Schlüssel ähnelt einer SQLite-Tabelle des Formulars:

CREATE TABLE Einstellungen (Name TEXT PRIMARY KEY, Value);

Dabei kann Wert NULL (REG_NONE) oder ein INTEGER (REG_DWORD/REG_QWORD), TEXT (REG_SZ) oder BLOB (REG_BINARY) sein.

Auch ich muss den Jasons über die Nützlichkeit der Durchsetzung einer maximalen Größe für Strings zustimmen. Da diese Zeitgrenzen meistens rein willkürlich sind, können Sie sich darauf verlassen, eines Tages eine 32-Byte-Zeichenfolge zu finden, die in Ihrem VARCHAR (30) gespeichert werden muss.