SQLite

Система управления реляционной базой данных без сервера
SQLite
Разработчик(и)Д. Ричард Хипп
Первоначальный выпуск17 августа 2000 г. ;
24 года назад
 ( 2000-08-17 )
Стабильный релиз3.48.0 [1] (14 января 2025 г. ; 17 дней назад ) [±] ( 14 января 2025 г. )
Репозиторий
  • sqlite.org./docsrc
Написано вС
Операционная системаКроссплатформенный
Размер699  КБ
ТипСУРБД ( встроенная )
ЛицензияОбщественное достояние [2]
Веб-сайтsqlite.org
Формат файла базы данных SQLite
Расширение имени файла
.sqlite, .sqlite3, .db, .db3, .s3db, .sl3
Тип интернет-СМИapplication/vnd.sqlite3[3]
Магическое число53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00( ASCII с завершающим нулем "SQLite format 3")
Первоначальный выпуск2004-06-18
Открытый формат ?да ( общественное достояние )
Веб-сайтsqlite.org/fileformat.html

SQLite ( / ˌ ɛ s ˌ k juː ˌ ɛ l ˈ t / , [4] [5] / ˈ s k w ə ˌ l t / [6] ) — это бесплатная реляционная СУБД с открытым исходным кодом , написанная на языке программирования C. Это не отдельное приложение; скорее, это библиотека , которую разработчики программного обеспечения встраивают в свои приложения . Как таковая, она принадлежит к семейству встроенных баз данных . Это наиболее широко используемая СУБД, поскольку она используется несколькими ведущими веб-браузерами , операционными системами , мобильными телефонами и другими встроенными системами . [7]

Многие языки программирования имеют привязки к библиотеке SQLite. Она, как правило, следует синтаксису PostgreSQL , но не обеспечивает проверку типов по умолчанию. [8] [9] Это означает, что можно, например, вставить строку в столбец, определенный как целое число. Хотя это облегченная встроенная база данных, SQLite реализует большую часть стандарта SQL и реляционной модели , включая транзакции и гарантии ACID . [10] Однако в ней отсутствуют многие функции, реализованные другими базами данных, такие как материализованные представления и полная поддержка триггеров и операторов ALTER TABLE . [11]

История

D. Richard Hipp разработал SQLite весной 2000 года, работая в General Dynamics по контракту с ВМС США . [12] Hipp разрабатывал программное обеспечение, используемое для системы контроля повреждений на борту эсминцев с управляемыми ракетами ; система контроля повреждений изначально использовала HP-UX с серверной частью базы данных Informix . SQLite начинался как расширение Tcl . [13]

В августе 2000 года была выпущена версия 1.0 SQLite с хранилищем на основе gdbm (GNU Database Manager). В сентябре 2001 года SQLite 2.0 заменил gdbm на пользовательскую реализацию B-дерева , добавив возможность транзакций . В июне 2004 года SQLite 3.0 добавил интернационализацию , типизацию манифеста и другие важные улучшения, частично финансируемые America Online . В 2011 году Хипп объявил о своих планах добавить интерфейс NoSQL в SQLite, а также анонсировал UnQL, функциональное надмножество SQL, разработанное для документно-ориентированных баз данных . [14]

В 2018 году SQLite приняла Кодекс поведения , поскольку некоторые клиенты не стали бы использовать программное обеспечение без него. [15] [16] Он был основан на Правиле Святого Бенедикта и был спорным из-за своей религиозной природы. Позднее документ был переименован в Кодекс этики. [17]

SQLite — один из четырех форматов, рекомендованных для долгосрочного хранения наборов данных , одобренных для использования Библиотекой Конгресса . [18] [19] [20]

Дизайн

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

Из-за бессерверной конструкции приложения SQLite требуют меньше настроек, чем клиент-серверные базы данных. SQLite называется нулевой конфигурацией [21], поскольку такие задачи настройки, как управление службами, сценарии запуска и управление доступом на основе пароля или GRANT , не нужны. Управление доступом осуществляется через разрешения файловой системы файла базы данных. [22] Базы данных в клиент-серверных системах используют разрешения файловой системы , которые предоставляют доступ к файлам базы данных только процессу- демону , который обрабатывает свои блокировки внутренне, позволяя выполнять одновременную запись из нескольких процессов.

SQLite хранит всю базу данных, состоящую из определений, таблиц , индексов и данных, как один кроссплатформенный файл, что позволяет нескольким процессам или потокам получать доступ к одной и той же базе данных одновременно. Он реализует эту простую конструкцию, блокируя файл базы данных во время записи. [22] Доступ к записи может завершиться ошибкой с кодом ошибки или может быть повторен до истечения настраиваемого тайм-аута. Операции чтения SQLite могут быть многозадачными , хотя из-за бессерверной конструкции запись может выполняться только последовательно. Это ограничение на параллельный доступ не применяется к временным таблицам и смягчено в версии 3.7, поскольку опережающее ведение журнала (WAL) обеспечивает одновременное чтение и запись. [23] Поскольку SQLite приходится полагаться на блокировки файловой системы, он не является предпочтительным выбором для развертываний с интенсивной записью. [24]

SQLite использует PostgreSQL в качестве справочной платформы. «Что бы сделал PostgreSQL» используется для понимания стандарта SQL. [25] [26] Одним из основных отклонений является то, что, за исключением первичных ключей , SQLite не обеспечивает проверку типов ; тип значения является динамическим и не ограничивается строго схемой ( хотя схема вызовет преобразование при сохранении, если такое преобразование потенциально обратимо). SQLite стремится следовать правилу Постела . [27]

Функции

SQLite реализует большую часть стандарта SQL-92 для SQL, но не имеет некоторых функций. Например, он только частично предоставляет триггеры и не может записывать в представления (однако, он предоставляет триггеры INSTEAD OF, которые предоставляют эту функциональность). Его поддержка операторов ALTER TABLE ограничена. [28]

SQLite использует необычную систему типов для SQL-совместимой СУБД: вместо назначения типа столбцу, как в большинстве систем баз данных SQL, типы назначаются отдельным значениям; в терминах языка он динамически типизирован . Более того, он слабо типизирован некоторыми из тех же способов, что и Perl : можно вставить строку в целочисленный столбец (хотя SQLite сначала попытается преобразовать строку в целое число, если предпочтительный тип столбца — целое число). Это добавляет гибкости столбцам, особенно при привязке к динамически типизированному языку сценариев. Однако этот метод непереносим на другие продукты SQL. Распространенной критикой является то, что в системе типов SQLite отсутствует механизм целостности данных , предоставляемый статически типизированными столбцами, хотя его можно эмулировать с помощью ограничений, таких как . [12] В 2021 году поддержка статической типизации была добавлена ​​через таблицы STRICT, которые обеспечивают ограничения типов данных для столбцов. [29]CHECK(typeof(x)='integer')

Таблицы обычно включают скрытый столбец индекса rowid , который обеспечивает более быстрый доступ. [30] Если таблица включает столбец INTEGER PRIMARY KEY, SQLite обычно оптимизирует его, рассматривая его как псевдоним для rowid , в результате чего содержимое сохраняется как строго типизированное 64-битное знаковое целое число и его поведение изменяется на нечто похожее на автоинкрементный столбец. SQLite включает возможность создания таблицы без столбца rowid, что может сэкономить дисковое пространство и повысить скорость поиска. Таблицы WITHOUT ROWID должны иметь первичный ключ. [31]

SQLite поддерживает ограничения внешнего ключа, [32] [33], хотя они отключены по умолчанию и должны быть включены вручную с помощью оператора PRAGMA. [34]

Хранимые процедуры не поддерживаются; это явный выбор разработчиков в пользу простоты, поскольку типичный вариант использования SQLite — встраивание в хост-приложение, которое может определять собственные процедуры вокруг базы данных. [35]

SQLite не имеет полной поддержки Unicode по умолчанию для обратной совместимости и из-за размера таблиц Unicode, которые больше, чем библиотека SQLite. [36] Полная поддержка преобразований регистра Unicode может быть включена с помощью дополнительного расширения. [37]

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

SQLite включает поддержку работы с JSON через расширение json1 , которое включено по умолчанию с 2021 года. Функции JSON SQLite могут обрабатывать синтаксис JSON5 с 2023 года. В 2024 году SQLite добавила поддержку JSONB, двоичной сериализации внутреннего представления JSON SQLite. Использование JSONB позволяет приложениям избегать необходимости анализировать текст JSON каждый раз при его обработке и экономит небольшой объем дискового пространства. [39]

Максимальный поддерживаемый размер файла базы данных SQLite составляет 281 терабайт. [40]

Разработка и распространение

Код SQLite размещается в Fossil , распределенной системе управления версиями , которая использует SQLite в качестве локального кэша для своего формата нереляционной базы данных и SQL SQLite в качестве языка реализации. [41] [42]

SQLite является общественным достоянием , но не «открытым вкладом», при этом на веб-сайте указано, что «проект не принимает патчи от людей, которые не предоставили заявление о передаче своего вклада в общественное достояние». [43] Вместо кодекса поведения основатели приняли кодекс этики, основанный на правиле Святого Бенедикта . [44]

В дистрибутиве SQLite предусмотрена отдельная программа командной строки sqlite3 [ 45] . Она может использоваться для создания базы данных, определения таблиц, вставки и изменения строк, выполнения запросов и управления файлом базы данных SQLite. Она также служит примером для написания приложений, использующих библиотеку SQLite.

SQLite использует автоматизированное регрессионное тестирование перед каждым релизом. Более 2 миллионов тестов запускаются как часть проверки релиза. Библиотека SQLite имеет 156 000 строк исходного кода, в то время как все тестовые наборы в совокупности составляют до 92 миллионов строк тестового кода. Тесты SQLite имитируют ряд исключительных сценариев, таких как отключение питания и ошибки ввода-вывода, в дополнение к тестированию функциональности библиотеки. Начиная с выпуска SQLite 3.6.17 от 10 августа 2009 года, релизы SQLite имеют 100% покрытие тестами ветвей, один из компонентов покрытия кода . SQLite имеет четыре различных тестовых комплекта : оригинальные общедоступные тесты TCL, фирменный тестовый набор TH3 на языке C, логические тесты SQL, которые проверяют SQLite на соответствие другим базам данных SQL, и фирменный движок фаззинга dbsqlfuzz . [46]

Известные применения

Операционные системы

SQLite по умолчанию включен в: [13]

Промежуточное ПО

  • Адаптер ADO.NET , изначально разработанный Робертом Симпсоном, поддерживается совместно с разработчиками SQLite с апреля 2010 года. [48]
  • Драйвер ODBC был разработан и поддерживается отдельно Кристианом Вернером. [49] Драйвер ODBC Вернера является рекомендуемым методом подключения для доступа к SQLite из OpenOffice.org . [50]
  • Оболочка COM ( ActiveX ) делает SQLite доступным в Windows для скриптовых языков, таких как JScript и VBScript . Это добавляет возможности базы данных SQLite в приложения HTML (HTA). [51]

Веб-браузеры

  • Браузеры Google Chrome , Opera , Safari и Android Browser позволяют хранить информацию в базе данных SQLite и извлекать ее из нее в браузере, используя официальную сборку SQLite Wasm ( WebAssembly ) [52] или технологию Web SQL Database , хотя последняя становится устаревшей (а именно, заменяется SQLite Wasm или IndexedDB ). Внутри эти браузеры на базе Chromium используют базы данных SQLite для хранения данных конфигурации, таких как история посещений сайта, файлы cookie, история загрузок и т. д. [53]
  • Mozilla Firefox и Mozilla Thunderbird хранят различные данные конфигурации (закладки, куки, контакты и т. д.) во внутренних базах данных SQLite. До версии Firefox 57 ( «Firefox Quantum» ) существовало стороннее дополнение, которое использовало API, поддерживающее эту функциональность, для предоставления пользовательского интерфейса для управления произвольными базами данных SQLite. [54]
  • Несколько сторонних дополнений могут использовать API JavaScript для управления базами данных SQLite. [55] [56]

Фреймворки веб-приложений

Другие

  • Adobe Systems использует SQLite в качестве формата файла в Adobe Lightroom , стандартной базы данных в Adobe AIR и внутри Adobe Reader . [13]
  • Apple Photos использует SQLite для внутренних нужд. [57]
  • Audacity использует SQLite в качестве формата файла, начиная с версии 3.0.0. [58]
  • Evernote использует SQLite для хранения локального репозитория базы данных в Windows.
  • Скайп [59]
  • Service Management Facility, используемый для управления службами в операционных системах Solaris и OpenSolaris .
  • Flame (вредоносное ПО)
  • Система спутниковой навигации BMW IDrive
  • Системы TomTom GPS для картографических данных NDS
  • Proxmox VEкластерная файловая система Proxmox (pmxcfs)

Смотрите также

Ссылки

Цитаты

  1. ^ "SQLite Release 3.48.0 On 2025-01-14". 14 января 2025 г. Получено 14 января 2025 г.
  2. ^ "SQLite Copyright". sqlite.org . Получено 17 мая 2010 г. .
  3. ^ "Формат файла базы данных SQLite тип носителя в IANA". Internet Assigned Numbers Authority . IANA . Получено 2019-03-08 .
  4. ^ "Почему SQLite преуспел как база данных — Ричард Хипп, создатель SQLite". Журнал изменений . Эпизод 201. Событие произошло в 00:17:25. Архивировано из оригинала 2022-07-07 . Получено 2019-08-06 . Как произносится название продукта? Я говорю SQL-ite, как минерал.
  5. ^ D. Richard Hipp (ведущий) (31 мая 2006 г.). Введение в SQLite (видео) . Google Inc. Событие происходит в 00:01:14 . Получено 23 марта 2010 г. . [...] ess-kju-ellite [...]
  6. ^ Д. Ричард Хипп (докладчик) (31 мая 2006 г.). Введение в SQLite. Google Inc. Событие происходит в 00:48:15 . Получено 23 марта 2010 г. [ ...] sequelite [...]
  7. ^ "Оценки наиболее широко используемых баз данных SQL". SQLite.org . Получено 11 мая 2011 г. .
  8. ^ Оуэнс, Майкл (2006). "Глава 4: SQL". В Gilmore, Джейсон; Томас, Кейр (ред.). Полное руководство по SQLite . D. Ричард Хипп (предисловие), Престон Хагар (технический рецензент). Apress . стр. 133. ISBN 978-1-59059-673-9. Архивировано из оригинала 24 ноября 2020 . Получено 30 декабря 2014 .
  9. ^ "STRICT Tables". Архивировано из оригинала 2022-08-07 . Получено 2022-08-11 .
  10. ^ "Полнофункциональный SQL". SQLite . Получено 24 января 2025 г. .
  11. ^ "Возможности SQL, которые SQLite не реализует". SQLite . Получено 24 января 2025 г. .
  12. ^ ab Owens, Michael (2006). "Введение в SQLite". Полное руководство по SQLite . Apress . doi :10.1007/978-1-4302-0172-4_1. ISBN 978-1-59059-673-9.
  13. ^ abc "Известные пользователи SQLite". SQLite. Архивировано из оригинала 11 июля 2015 г. Получено 5 августа 2015 г.
  14. ^ "Интервью: Ричард Хипп о UnQL, новом языке запросов для документных баз данных". InfoQ. 4 августа 2011 г. Архивировано из оригинала 8 апреля 2014 г. Получено 5 октября 2011 г.
  15. ^ Хипп, Д. Ричард. «Кодекс этики». SQLite . Получено 24 января 2025 г. .
  16. ^ Болярд, Паула (24 октября 2018 г.). «Техническое сообщество возмущено после того, как основатель SQLite принял бенедиктинский кодекс поведения». PJ Media . Получено 24 января 2025 г.
  17. ^ Маккарти, Кирен. «Создатель SQLite распят после того, как кодекс поведения предостерегает разработчиков любить Бога, а не убивать, прелюбодействовать, воровать, проклинать...» www.theregister.com . Архивировано из оригинала 2022-11-17 . Получено 2022-11-17 .
  18. ^ "LoC Recommended Storage Format". sqlite.org . Архивировано из оригинала 2020-04-23 . Получено 2020-04-09 .
  19. ^ "SQLite, версия 3". www.loc.gov . 2017-03-28. Архивировано из оригинала 2020-05-11 . Получено 2020-04-09 .
  20. ^ "Заявление о рекомендуемых форматах – наборы данных/базы данных". Библиотека Конгресса. Архивировано из оригинала 2018-08-22 . Получено 2020-04-09 .
  21. ^ "SQLite Is A Zero-Configuration Database". SQLite.org. Архивировано из оригинала 2 мая 2024 г. Получено 3 августа 2015 г.
  22. ^ ab "SQLite". ClickHouse Docs . Получено 25 января 2025 г.
  23. ^ "Write Ahead Logging in SQLite 3.7". SQLite.org. Архивировано из оригинала 2 мая 2024 г. Получено 3 сентября 2011 г. WAL обеспечивает большую параллельность, поскольку читатели не блокируют писателей, а писатель не блокирует читателей. Чтение и запись могут выполняться одновременно.
  24. ^ "Appropriate Uses For SQLite". SQLite.org. Архивировано из оригинала 2024-05-02 . Получено 2015-09-03 .
  25. ^ "PGCon 2014: Кластеризация и VODKA". Lwn.net . Архивировано из оригинала 2015-06-29 . Получено 2017-01-06 .
  26. ^ "PGCon2014: SQLite: Protégé of PostgreSQL". Pgcon.org . 20 сентября 2015 г. Архивировано из оригинала 2014-12-30 . Получено 2017-01-06 .
  27. ^ "SQLite: StrictMode". Sqlite.org . Архивировано из оригинала 4 марта 2016 г. Получено 3 сентября 2015 г.
  28. ^ "История выпусков SQLite". Архивировано из оригинала 2021-03-16 . Получено 2021-03-22 .
  29. ^ "STRICT Tables". SQLite . Получено 24 января 2025 г. .
  30. ^ "SQL As Understood By SQLite". SQLite . Архивировано из оригинала 21 мая 2018 г. Получено 21 мая 2018 г. Поиск записи с определенным rowid или всех записей с rowid в указанном диапазоне выполняется примерно в два раза быстрее, чем аналогичный поиск, выполненный с указанием любого другого PRIMARY KEY или индексированного значения.
  31. ^ "Кластеризованные индексы и оптимизация WITHOUT ROWID". SQLite . Получено 24 января 2025 г. .
  32. ^ Карвин, Билл (май 2010 г.). Картер, Жаклин (ред.). Антипаттерны SQL: избегание ловушек программирования баз данных . The Pragmatic Bookshelf. стр. 70. ISBN 978-1-934356-55-5. Иногда вам приходится использовать базу данных, которая не поддерживает ограничения внешнего ключа (например, механизм хранения MyISAM MySQL или SQLite до версии 3.6.19).
  33. ^ "SQLite Release 3.6.19 On 2009-10-14". sqlite.org . Архивировано из оригинала 2020-10-29 . Получено 2020-10-15 .
  34. ^ "Поддержка внешнего ключа SQLite". SQLite . Получено 24 января 2025 г. .
  35. Источник: комментарии разработчиков на форуме SQLite. Архивировано 01.04.2023 на Wayback Machine.
  36. ^ «Странности, предостережения и подводные камни в SQLite». SQLite . Получено 24 января 2025 г. .
  37. ^ "Нечувствительное к регистру сопоставление символов Unicode не работает". SQLite Frequently Asked Questions . Архивировано из оригинала 2015-09-05 . Получено 2015-09-03 .
  38. ^ "SQLite FTS5 Extension". SQLite . Получено 24 января 2025 г. .
  39. ^ "Функции и операторы JSON". SQLite . Получено 24 января 2025 г. .
  40. ^ "Limits In SQLite". SQLite.org . Архивировано из оригинала 2021-11-07 . Получено 2022-09-19 .
  41. ^ «Мысли о конструкции ископаемого DVCS». Fossil-scm.org. 12 июля 2017 г. Архивировано из оригинала 13 октября 2022 г. Получено 14 октября 2022 г.
  42. ^ "Fossil: Fossil Performance". Fossil-scm.org. 23 августа 2009 г. Архивировано из оригинала 9 октября 2009 г. Получено 12 сентября 2009 г.
  43. ^ "SQLite Copyright". sqlite.org . Архивировано из оригинала 2024-03-15 . Получено 2024-03-06 .
  44. ^ "Кодекс этики". sqlite.org . Архивировано из оригинала 2024-02-19 . Получено 2024-03-06 .
  45. ^ "Command Line Shell For SQLite". Sqlite.org. Архивировано из оригинала 6 октября 2022 г. Получено 14 октября 2022 г.
  46. ^ "Как тестируется SQLite". SQLite.org. Архивировано из оригинала 6 октября 2009 г. Получено 12 сентября 2009 г.
  47. ^ «Использовать версию SQLite, установленную вместе с Windows». 20 октября 2022 г. Архивировано из оригинала 31 марта 2022 г. Получено 31 марта 2022 г.
  48. ^ "Home". System.Data.SQLite . 2016-12-30. Архивировано из оригинала 2014-07-13 . Получено 2017-01-06 .
  49. ^ "SQLite ODBC Driver". Ch-werner.de . 2016-12-01. Архивировано из оригинала 2014-06-26 . Получено 2017-01-06 .
  50. ^ "Использование базы данных SQLite с OpenOffice.org: версия 2.0" (PDF) . Documentation.openoffice.org . Архивировано (PDF) из оригинала 2011-09-28 . Получено 2017-01-06 .
  51. ^ "sqlite — Sqlite Wrappers". SQLite.org. 7 февраля 2009 г. Архивировано из оригинала 5 февраля 2009 г. Получено 7 февраля 2009 г.
  52. ^ "sqlite3 WebAssembly & JavaScript Documentation Index". SQLite . Архивировано из оригинала 2024-05-02 . Получено 2023-05-08 .
  53. ^ "Расположение истории Google Chrome". www.foxtonforensics.com . 2020-10-06. Архивировано из оригинала 2023-02-28 . Получено 2020-10-06 .
  54. ^ "SQLite Manager :: Дополнения для Firefox". Addons.mozilla.org . 2015-02-28. Архивировано из оригинала 2017-01-02 . Получено 2017-01-06 .
  55. ^ "SQLite Manager – Get this Extension for 🦊 Firefox (en-US)". Addons.mozilla.org . 2018-07-24. Архивировано из оригинала 2018-10-05 . Получено 2018-10-05 .
  56. ^ "SQLite Reader – Получите это расширение для 🦊 Firefox (en-US)". Addons.mozilla.org . 2018-09-01. Архивировано из оригинала 2018-10-05 . Получено 2018-10-05 .
  57. ^ «Использование SQL для поиска лучшей фотографии пеликана по версии Apple Photo». Веблог Саймона Уиллисона . Архивировано из оригинала 22 мая 2020 г. Получено 23 мая 2020 г.
  58. ^ "Audacity 3.0.0 Released". 17 марта 2021 г. Архивировано из оригинала 14 августа 2023 г. Получено 17 марта 2021 г.
  59. ^ Хайнегарднер, Джереми (28 августа 2007 г.). "Skype client using SQLite?". sqlite-users (список рассылки). Архивировано из оригинала 2007-11-17 . Получено 14 июня 2010 г.

Источники

  • Аллен, Грант; Оуэнс, Майк (5 ноября 2010 г.). Полное руководство по SQLite (2-е изд.). Apress . стр. 368. ISBN 978-1-4302-3225-4. Архивировано из оригинала 30 декабря 2010 г. . Получено 23 декабря 2010 г. .
  • Крейбих, Джей А. (17 августа 2010 г.). Использование SQLite (1-е изд.). O'Reilly Media . стр. 528. ISBN 978-0-596-52118-9. Архивировано из оригинала 25 декабря 2010 г. . Получено 23 декабря 2010 г. .
  • Ньюман, Крис (9 ноября 2004 г.). SQLite (Библиотека разработчика) (1-е изд.). Сэмс . стр. 336. ISBN 0-672-32685-X. Архивировано из оригинала 14 января 2012 г. . Получено 12 мая 2010 г. .
  • Официальный сайт
  • «Нерассказанная история SQLite». CoRecursive.
Взято с "https://en.wikipedia.org/w/index.php?title=SQLite&oldid=1272222637"