Динамическая типизация SQLite3 - PullRequest
18 голосов
/ 22 марта 2010

SQLite3 использует динамическую типизацию, а не статическую, в отличие от других разновидностей SQL.Веб-сайт SQLite гласит:

Большинство механизмов баз данных SQL (насколько нам известно, каждый механизм баз данных SQL, кроме SQLite) использует статическую жесткую типизацию.При статической типизации тип данных значения определяется его контейнером - конкретным столбцом, в котором хранится значение.

SQLite использует более общую систему динамических типов.В SQLite тип данных значения связан с самим значением, а не с его контейнером.

Мне кажется, это именно то, что вы не хотите,так как он позволяет хранить, например, строки в целочисленных столбцах.

Страница продолжается:

... динамическая типизация в SQLite позволяет ему делать то, что невозможнов традиционных жестко типизированных базах данных.

У меня есть два вопроса:

  1. Вопрос варианта использования: Каковы некоторые примеры, когда динамическая типизация SQLite3 полезна?
  2. Исторический / проектный вопрос: Какова была мотивация для реализации SQLite с динамической типизацией?

Ответы [ 2 ]

9 голосов
/ 22 марта 2010

Это называется сходство типов в SQLite.

Согласно веб-сайту SQLite, они сделали это «для обеспечения максимальной совместимости между SQLite и другими механизмами баз данных».(см. ссылку выше)

SQLite поддерживает концепцию «соответствия типов» для столбцов.Сходство типов столбца является рекомендуемым типом для данных, хранящихся в этом столбце.Важной идеей здесь является то, что тип рекомендуется, а не требуется.Любой столбец может хранить данные любого типа.Просто некоторые столбцы, при выборе, предпочитают использовать один класс хранения над другим.Предпочтительный класс хранения для столбца называется его «сходством».

Насколько я понимаю, SQLite - это именно то, для чего он назван - очень легкий, минималистичный механизм базы данных.Накладные расходы, связанные со строгой типизацией, вероятно, выходят за рамки проекта, и их лучше оставить приложению, использующему SQLite.

Но, опять же, согласно их веб-сайту, они сделали это для максимальной совместимости с другими БДдвигатели.

4 голосов
/ 22 марта 2010

Если вы посмотрите, скажем, страницу «about: config» в Firefox, я считаю, что эти настройки на самом деле хранятся в базе данных SQlite (хотя я не уверен на 100%). Преимущество использования динамической типизации SQlite состоит в том, что каждое значение в настройках может быть строго типизированным (например, параметр «alerts.totalOpenTime» является целым числом, а «app.update.channel» - строка) без необходимости иметь один отдельный столбец по типу.

В конце концов, это тот же аргумент, что и для языков программирования: почему динамическая типизация в языке программирования отличается от статической типизации?

...