17 Stimmen

Wann ist die Manifesttypisierung von Sqlite nützlich?

Sqlite verwendet etwas, das die Autoren als " Manifest-Typisierung ", was im Grunde bedeutet, dass Sqlite dynamisch typisiert ist: Sie können einen varchar-Wert in einer "int"-Spalte speichern, wenn Sie das wollen.

Das ist eine interessante Designentscheidung, aber immer wenn ich Sqlite benutzt habe, habe ich es wie ein Standard-RDMS benutzt und die Typen so behandelt, als ob sie statisch wären. In der Tat habe ich mir bei der Entwicklung von Datenbanken in anderen Systemen noch nie dynamisch typisierte Spalten gewünscht.

Wann ist diese Funktion also nützlich? Hat jemand in der Praxis eine gute Verwendung dafür gefunden, die man nicht genauso gut mit statisch typisierten Spalten hätte machen können?

5voto

JasonRShaver Punkte 4324

Es macht die Verwendung von Schriftarten wirklich einfacher. Sie müssen sich keine Gedanken mehr darüber machen, wie groß dieses Feld auf Datenbankebene sein muss oder wie viele Digets Ihre Interger sein können. Es ist mehr oder weniger ein "Warum nicht?".

Andererseits ermöglicht die statische Typisierung in SQL Server dem System eine bessere Suche und Indexierung, in einigen Fällen sogar eine viel bessere, aber bei der Hälfte aller Anwendungen bezweifle ich, dass Verbesserungen der Datenbankleistung von Bedeutung sind, oder ihre Leistung ist aus anderen Gründen "schlecht" (bei jedem Select werden temporäre Tabellen erstellt, exponentielle Selects usw.).

Ich verwende SqLite die ganze Zeit für meine .NET-Projekte als Client-Cache, weil es einfach zu einfach zu bedienen ist. Nun, wenn sie es nur bekommen können, um GUIDs die gleiche wie SQL Server verwenden würde ich ein glücklicher Camper sein.

4voto

dan04 Punkte 82011

Dynamische Typisierung ist nützlich, um Dinge wie Konfigurationseinstellungen zu speichern. Nehmen Sie zum Beispiel die Windows-Registrierung. Jeder Schlüssel ist vergleichbar mit einer SQLite-Tabelle in der Form:

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

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

Außerdem muss ich den Jasons zustimmen, dass es sinnvoll ist, keine Maximalgröße für Strings zu erzwingen. Denn in den meisten Fällen sind diese Grenzen rein willkürlich, und Sie können damit rechnen, dass Sie eines Tages eine 32-Byte-Zeichenkette finden, die in Ihrem VARCHAR(30) gespeichert werden muss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X