Динамическая типизация SQLite3
SQLite3 использует динамическую типизацию, а не статическую типизацию, в отличие от других особенностей SQL. сайт SQLite читает:
Большинство механизмов СУБД SQL (каждый SQL-сервер, отличный от SQLite, насколько нам известно) использует статическую жесткую типизацию. При статической типизации тип данных значения определяется его контейнером - конкретным столбцом, в котором хранится значение.
SQLite использует более общую систему динамического типа. В SQLite тип данных значения связан с самим значением, а не с его контейнером.
Мне кажется, что это именно то, чего вы не хотите, поскольку оно позволяет хранить, например, строки в целых столбцах.
Страница продолжается:
... динамическая типизация в SQLite позволяет делать то, что невозможно в традиционных жестко типизированных базах данных.
У меня есть два вопроса:
- Вопрос о применении: какие примеры, когда динамическая типизация SQLite3 полезна?
- Вопрос истории/дизайна: Какова была мотивация для внедрения SQLite с динамической типизацией?
Ответы
Ответ 1
Это называется тип близости в SQLite.
Согласно веб-сайту SQLite, они сделали это "для обеспечения максимальной совместимости между SQLite и другими механизмами базы данных". (см. ссылку выше)
SQLite поддерживает концепцию "сродство типа" к столбцам. Тип сродства столбца является рекомендуемым типом данных, хранящихся в этом столбце. Важная идея здесь в том, что тип рекомендуется, не требуется. Любой столбец может хранить любые типы данных. Просто некоторые столбцы, учитывая выбор, предпочтут использовать один класс хранения над другим. Предпочтительный класс хранения для столбца называется его "сродством".
Я понимаю, что SQLite - это именно то, что он назвал, - очень легкий, минималистичный движок базы данных. Накладные расходы, связанные с сильной типизацией, вероятно, выходят за рамки проекта, и лучше всего оставить приложение, использующее SQLite.
Но опять же, согласно их веб-сайту, они сделали это, чтобы максимизировать совместимость с другими механизмами БД.
Ответ 2
Если вы посмотрите, скажем, на страницу Firefox about about: config, я считаю, что эти настройки фактически хранятся в базе данных SQlite (хотя я не уверен на 100%). Преимущество использования динамической типизации SQlite заключается в том, что каждое значение в настройках может быть строго типизировано (например, параметр "alerts.totalOpenTime" является целым числом, тогда как "app.update.channel" является строкой) без необходимости иметь один отдельный столбца на тип.
Это в основном тот же аргумент, что и для языков программирования, в конце концов: почему есть динамическая типизация на языке программирования при статическом вводе?