Типичная клиент-серверная СУБД - это не просто один язык, а комбинация нескольких языков и технологий, которые работают вместе, включая (но не ограничиваясь):
- Сервер:
- Физическое хранилище - обычно файлы ОС или даже необработанные разделы, поверх которых находятся процессы и потоки СУБД.
- Модель данных - таблицы, индексы, ограничения и т. Д.
- Язык описания модели данных - обычно SQL Data Definition Language (DDL).
- Язык запросов - обычно SQL языка управления данными (DML).
- Процедурные расширения SQL для написания триггеров и хранимых процедур, таких как PL / SQL в Oracle или Transact-SQL в MS SQL Server.
- Управляемый язык, такой как Java или C #, который выполняется «внутри» СУБД, а также может использоваться для реализации триггеров и хранимых процедур.
- Клиент:
- Различные инструменты администрирования, обычно как из командной строки, так и с графическим интерфейсом.
- Драйверы и API, обеспечивающие доступ к базе данных на языках общего назначения. Это включает независимые от СУБД API, такие как ODBC, OLEDB, ADO.NET, JDBC, BDE и т. Д., А также специфичные для СУБД API, такие как Oracle OCI.
- Вдобавок ко всему, в которых находятся клиентские приложения, которые фактически реализуют некоторые полезные функции, написанные на этих языках общего назначения. Есть все виды клиентов, от «классических» до многоуровневых, но это уже другая тема ...
Существуют также гораздо более простые «встроенные» СУБД, предназначенные для использования в качестве локального «частного» хранилища для конкретного приложения, а не в клиент-серверной среде.
Большинство СУБД являются «реляционными», но существуют также системы «объектно-ориентированного» и «без SQL» / «хранилища ключей-значений» и все их гибриды.
Итак, не могли бы вы реализовать СУБД на «нормальном» языке, таком как Java или C #?
Теоретически да. Практически нет!
Предоставление клиентам доступа к данным одновременно, безопасно и быстро - сложная проблема, которую решают СУБД. Просмотр базы данных в виде набора таблиц обманчиво прост - существует масса сложности, которая позволяет СУБД поддерживать эту иллюзию (относительной) простоты.
Так же, как вы не будете использовать ассемблер в большинстве ситуаций, потому что язык более высокого уровня реализует концепции, позволяющие вам работать продуктивно, и так же, как вы не будете реализовывать свои собственные структуры данных и алгоритмы, если соответствующие библиотеки уже доступны, вы также не будет пытаться управлять вашими данными, если есть доступная СУБД, отвечающая вашим потребностям.