Почему базы данных не интегрированы как языковая функция?


25

Существуют ли какие-либо языки программирования, которые имеют встроенную базу данных в качестве первоклассной языковой функции вместо подключения к внешней базе данных SQL (или другой)? Каковы будут недостатки и преимущества такой функции? Как будет выглядеть такая функция и как она изменит способ программирования?


17
Я думал, что SQL был языком. : D
Кевин Канту

8
.NET имеет LINQ для SQL, что, я думаю, является правильным подходом к общей проблеме. Вы не должны привязываться к конкретной базе данных, и вы не можете сделать что-то достаточно общее, и в то же время реализовать все возможности всего, что там есть. LINQ все еще потрясающий, как и я.
Работа

linq2SQL мертв, заменен на linq2EF, но тот же принцип
BlackICE

3
и, к сожалению, у Linq2EF есть несколько неприятных расширений только для Microsoft, что означает, что вы будете привязаны к SQLServer, если будете делать что-то сложное.
gbjbaanb

1
@ Задание «Вы не должны блокироваться в конкретной базе данных». Как обычно, как я уже говорил, я не могу больше не соглашаться с этой идеей в целом. Скорее, я бы усовершенствовал эту философию или прекратил бы поддерживать ее. Например, я бы не блокировал свой код уровня пользовательского интерфейса в конкретной базе данных. Тем не менее, я бы определенно заблокировал свой код уровня сервисов в конкретной базе данных.
Майкл О'Нил

Ответы:


15

Единственный язык, о котором я могу думать, это старые языки xBase, такие как DBase, Clipper и FoxPro. Существует проект GNU, который предлагает бесплатную и в основном совместимую версию, которая называется Clip

Был также Pick Basic, который связывал язык программирования непосредственно с платформой базы данных.

Это было сделано. Это был эволюционный тупик, который ограничивал то, как язык мог получить доступ к данным.


2
Можете ли вы объяснить, почему это эволюционный тупик? Я не думаю о реализации, мне просто любопытно.
VirtuosiMedia

1
@VM Наблюдается четкая тенденция использования API и разграничения языка, библиотек и времени выполнения. На данный момент, четко определенные API-интерфейсы, которые обеспечивают общий доступ к данным; независимо от языка или базы данных или даже схемы базы данных являются общими. Наиболее распространенные языки поставляют общий API базы данных как часть стандартной библиотеки. То же самое для доступа к файлам и http. Больше нет необходимости ввязывать его в язык.
сал

1
Разница во времени вызова между локальным и удаленным API-интерфейсом различается на несколько порядков, добавьте больше, если существует сетевой интерфейс. Все еще существуют явные и реальные преимущества использования языков в стеке БД.
Jé Queue

@Xepoch, конечно, если вы хотите привязать себя к базе данных этого поставщика и языковой реализации.
BlackICE

1
@ Дэвид, перечитайте вопрос, скажите, пожалуйста, на каком языке это будет когда-либо, что не было бы для блокировки продавца?
Jé Queue

29

Языки «маленькие» и базы данных «большие»; поэтому, когда они объединяются, это не язык с базой данных как функцией, а база данных с языком как функцией. Многие базы данных имеют некоторые проприетарные языки, например PL / SQL, T-SQL.


Как языки "маленькие"?
Рей Миясака

Это вопрос восприятия. Конечно, базы данных, кажется, имеют большую кодовую базу, большую документацию, большие требования к диску (даже если мы не учитываем фактические данные); но эти сравнения вряд ли справедливы, потому что большинство баз данных поставляются с одним или даже несколькими языками программирования.
user281377

3
Rei: Вы еще не посмотрели PL / SQL? Кстати, Oracle также включает в СУБД JVM.
user281377

3
Rei: На самом деле, многие люди используют PL / SQL для написания приложений, по крайней мере, в части бизнес-логики. Как вы, возможно, знаете, PL / SQL также является языком, используемым в Oracle Forms, поэтому вы можете написать и запустить программу на PL / SQL, которая никогда не касается базы данных. На практике PL / SQL используется вместе с СУБД Oracle.
user281377

2
Ну блин, никогда бы не подумал.
Рей Миясака

16

Я не обязательно думаю, что правильный вопрос "почему нет?" но "почему это должно быть?" Что можно было бы получить, если бы базы данных были особенностью языка? Помните, что язык находится в самом низу стека программирования. Создание раздутого языка влияет на все . Таким образом, разработчики языка должны не спешить добавлять новые функции, особенно те, которые связаны с такими инвестициями.


6
Потому что вам нужны преимущества проверки типов и даже простой проверки имен, когда вы работаете за пределами языка запросов и языка программирования.
Макнейл

4
@Macneil, инструменты ORM делают это сейчас. Что должно быть вписано в язык, когда API могут это сделать?
Sal

1
@sal Чтобы распространителям приложений не приходилось связывать огромные СУБД только для того, чтобы получать элементарные записи и проверки непротиворечивости в свои кэши, поисковые индексы и т. д. Вот почему существует SQLite: « конкурировать сfopen() ».
Дамиан Йеррик

@sal: вероятно, по той же причине, по которой регулярные выражения или числа с плавающей запятой объединяются в некоторые языки, когда это могут делать API. Потому что кто-то писал язык и решил, что он достаточно фундаментален, чтобы гарантировать специальный синтаксис. Конечно, это такая общая причина, чтобы не быть полезным ответом ;-)
Стив Джессоп

14

Существует 3 устаревшие системы, которые соответствуют вашим требованиям:

  1. Выбрать ,
  2. MUMPS ,
  3. Microsoft Access

Pick и MUMPS были разработаны за годы до того, как первый академический документ по реляционным базам данных (примерно за десять лет до того, как первая коммерческая система баз данных на основе SQL вышла на рынок) от компании, которую мы сейчас называем Oracle, - первая попытка IBM создать продукт потерпела крах и успешная система на основе SQL была позже). Вы можете обнаружить, что они все еще используются (наша местная система общественного транспорта до недавнего времени использовала Pick для системы планирования поездки). Вы не хотите иметь ничего общего ни с Pick, ни с MUMPS, и лучший совет, который я могу дать, - «отойди от клавиатуры, держа руки в воздухе!». Если вы делаете что - нибудь сделать с ними, фраза «ты пожалеешь» должен быть звон в ушах.

Microsoft Access подвергается жесткой насмешке и критике в ИТ-кругах, поскольку для не-разработчика довольно легко сделать критически важное бизнес-приложение из Access и превратить его в нечто, без чего компания в буквальном смысле слова не может жить. Также вполне вероятно, что многие разработчики начали разработку с помощью MS Access, и, по мере того, как дела продолжали увязать, они научились их исправлять (первым шагом традиционно является изучение Visual Basic и переписывание приложения Access сначала в VB, затем в чем-то "лучше"). Можно создать приложение Access с хорошим поведением, которое будет работать с огромным объемом данных - я видел, как это было сделано - но есть более простые способы сделать что-то, и для создания (и поддержания) скважины требуется гораздо меньше навыков Вело приложение из VB и SQL Server.

Начиная с SQL Server 2005, Microsoft представила возможность помещать CLR в хранимые процедуры и функции. И если вы хотите быть хитрым, вы можете создать типы данных, которые затем сможете использовать в качестве столбцов в базе данных. Я думаю, что у Oracle было что-то похожее с Java.

Это, как говорится, я не думаю, что есть что-то, что мешает вам создать или выдвигать гипотезы о них. Pick и MUMPS старше, чем большинство программистов, здесь и отражают очень COBOLy взгляд на мир.

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


+1 хотя я думаю, что программист, достаточно опытный для создания масштабируемого приложения Access, заслуживает лучшей рабочей среды.
Ларри Коулман

3
Access - это не язык программирования, а скорее интегрированная среда разработки и среды исполнения. Язык, который он использует, VBA - это тот же язык, который используется для макропрограммирования в других офисных продуктах и ​​не зависит от Access. Доступ к БД по-прежнему осуществляется через различных провайдеров к драйверам JET.
Джереми

1
В дополнение к трем упомянутым вами, есть несколько сред 4GL: Oracle Forms, CA OpenROAD (урожденная Ingres Windows4GL) и Uncell Accell (просто чтобы назвать те, с которыми я работал).
TMN

Кроме того, я не уверен, что Access на самом деле является «наследием», независимо от того, как сильно вы хотели бы, чтобы это было :)
Хайлем

+1 за превосходную базу данных эпидемического паротита, привязанную к чудовищному языку.
Джеймс Андерсон

4

Добавление базы данных на язык программирования может обслуживать только очень узкий круг пользователей. Что если они захотят использовать некоторые функции, не относящиеся к РСУБД? Или вообще не хотите использовать базу данных? Компилятор будет излишне раздут для таких случаев использования.


4

Err.

Ну, во-первых, вы спрашиваете, почему среда, в которой работает язык, не предоставляет базу данных. Язык - это просто средство выражения того, что вы хотите сделать в грамматике; это действительно не предоставляет такие услуги. :)

Тем не менее, есть несколько причин.

  • Создание эффективной системы хранения базы данных - сложная проблема, вероятно, порядка или больше, чем при создании .NET Framework (например). Если команда попытается включить базу данных в свои рамки, это будет все, над чем они в конечном итоге работают.

  • База данных, которая загружается, должна находиться на отдельной отдельной машине, а не в процессе доступа к коду.

  • ORM обеспечивают большую безопасность типов и проверку времени компиляции, которые могут быть полезны для такого действия, без фактической попытки структуры стать базой данных.

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


встроенный sqlite действительно потрясающий, если у вас его нет, разработчики языка в итоге вместо этого используют XML как механизм хранения :(
gbjbaanb

2

они есть; такие языки называются 4GL . DataFlex мой любимый, хотя я им больше не пользуюсь.

Предупреждение: я помог разработать объектно-ориентированную версию DataFlex v3.0


2

Я думаю, что ваш настоящий вопрос: «Почему нет языков программирования, которые поставляются с библиотеками баз данных ».

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

На самом деле, кроме чтения / записи в кучу и стек, большинство языков программирования даже не выполняют никакого реального ввода-вывода. Некоторые языки предоставляют нативные функции для выражения операций ввода-вывода (например, print команда в BASIC), но большинство языков просто обрабатывают их как обычные вызовы функций (например, printfв C) и позволяют библиотекам обрабатывать фактическую запись.

Некоторые языки, такие как C #, предлагают языковые возможности для выражения запросов, но даже в этом случае это просто выражения в самой базовой структуре данных списков (или IEnumerables, как их называют в .NET), которые переводятся в операции SQL библиотеками - сам язык все еще только работает с очень абстрактными понятиями IO.

Что касается того, почему встраивание пакета базы данных в стандартную библиотеку языка программирования не является хорошей идеей, скорее всего, потому что ничто другое в стандартной библиотеке обычно не зависит от функциональности базы данных.


Многие языки программирования поставляются с библиотеками БД. Python и PHP оба имеют sqlite. Visual Studio поставляется с SQL Server Express.
кв.

Это интерфейсы БД, а не сами БД. Среда выполнения .NET не поставляется с Visual Studio и SQL Server Express.
Рей Миясака

@ReiMiyasaka Стандартная библиотека Python включает в себя весь движок SQLite, поскольку SQLite - это просто библиотека C, на которую ссылается программа, а не отдельный процесс или что-либо еще.
Дамиан Йеррик

2

Да. Языки на платформе AS / 400 имеют собственную первоклассную поддержку баз данных.

Это связано с тем, что платформа AS / 400 полностью интегрирована с базой данных и предоставляет множество очень полезных функций, таких как простота навигации по набору результатов, обновляющая значения по пути.


0

Зависит от языка и платформы. Например, для меня довольно тривиально использовать различные базы данных при работе с C, я просто использую соответствующую библиотеку.

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

По крайней мере, так обстоит дело с языками, которые соответствуют стандартам, установленным такими организациями, как ISO.


0

Как написано, вопрос частично неверен, как показали некоторые контрпримеры выше.

Поэтому сначала я бы уточнил вопрос: «Почему СУБД обычно не интегрируется в качестве функции языков программирования общего назначения высокого уровня?»

Это по той же причине, по которой другие программные продукты, такие как операционные системы, файловые системы, веб-серверы, уровни кэширования и т. Д., Обычно не являются встроенными. Языки общего назначения обычно работают на уровне абстракции выше, чем у таких продуктов. Поэтому программисту целесообразно внедрить СУБД вязык общего назначения, и эта СУБД может даже предоставлять аспекты своего родительского языка или специфичного для БД декларативного языка для использования программистами БД. Но при написании СУБД слишком много вариантов проектирования, чтобы их можно было исправить на языке программирования общего назначения. Если вы исправите их, вы получите случай, подобный MUMPS, где запутывание этих двух результатов приводит к целой отрасли, увязшей в проблеме курицы и яйца, застрявшей в устаревшей СУБД и устаревшем языке программирования.


0

Используется для работы в NonStop / SQL, который полностью интегрирован в NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran и, возможно, другие языки, а также полностью интегрирован с NonStop / Guardian, операционной системой, на которой установлены компьютеры. RAN.

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

Скорее всего, вы попадете на ПК, скорее всего, MS Access, Embarcadero / Borland Delphi - второе место.

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


0

Как бывший разработчик Visual Foxpro, я считаю странным, что ни один основной язык не определяет реляционную модель как часть языка.

Наличие полной базы данных не очень хорошая идея, но использование языка «SQL» может быть ОЧЕНЬ полезным.

В ОО существует несоответствие импеданса. Это произошло потому, что объекты и наборы не похожи друг на друга. Но если язык позволит мне определить TABLES, FIELDS, RELATIONS, CONSTRAINS и т. Д. (Без привязки к конкретному хранилищу), он будет очень мощным. Кроме того, создание ORM будет более однозначным отображением.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.