Oracle

Oracle - одна из богатейших софтверных фирм. Тем не менее, не может сделать себе инструментарий хотя бы в первом приближении уровня Microsoft-а, известного своим внимательным отношением к разработчикам - самому главному фактору для продвижения платформ и решений. И не думает лечить "детские болезни" 20-летней давности.

Текст ниже содержит технические страшилки.

Начнем с TOAD. Ясно, что хорошее дело жабой не назовут. Несмотря на обильную функциональность этот инструмент представляет собой пример того, как НЕ надо проектировать пользовательский интерфейс. Десятки мелких кнопок и закладок в несколько рядов не способствуют, мягко говоря, эргономике. Microsoft SQL Server Management Studio не говоря уже о Visual Studio Data Tools - это какие-то космические технологии. По сравнению. Тем не менее, TOAD по умолчанию стоял у всех (!) виденных мной команд разработчиков, связанных с ораклом, иллюстрируя извечное "мыши плакали, но жрали кактус". С юникодом у него беда, но это видимо, из-за того, что разработчики "жабы" так и не перешли на Delphi старших версий (продукт написан на Delphi).

Теперь сам движок БД.

Схемы по-прежнему привязаны к пользователю. Никаких пространств имен. Пользуйтесь префиксами и не балуйте.

Все еще живо ограничение на длину системных имен в 30 символов в 2012 году... Спасибо, что не "8.3".

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

Например, тип int в SQL Server занимает 4 байта. В оракле требуется выделить NUMERIC(10), что займет, согласно документации, 6 байт. Вроде бы небольшое отличие, но на таблице со 100М записей разница по хранению без учета компрессии получится 200 МБайт помноженной на число целочисленных колонок, как правило, внешних ключей. Аналогично с типами tinyint и smallint.

Отсутствует логический тип. Но беда не в самом отсутствии, а в том, что лучшая практика - использование типа VARCHAR2(1) с ограничением типа CHECK column IN ('F', 'T'). Для сравнения, в SQL Server используется тип bit, занимающий один бит, выровненный до 1 байта. То есть от 1 до 8 логических полей займут 1 байт при хранении.

Опять же, лучшие практики советуют, но не объясняют, почему тип VARCHAR2(n) эффективнее CHAR(n) если длина значения фиксирована. Ведь для полей переменной длины где-то должен храниться байт-терминатор или длина. Спецификация на физическое хранение не прояснила этот вопрос.

Напоследок маленький пример, без сомнения стимулирующий разрабатывать ваши программы под Оракл.

Простейшая конструкция

CREATE TABLE T1 (
  ID_T1 NUMBER(10) NOT NULL ,
  CREATED TIMESTAMP NOT NULL DEFAULT SYSDATE
)

Выдаёт ошибку для 10g:

Error at line 1
ORA-00907: missing right parenthesis

В чем проблема? А просто в том, что надо поменять местами объявления DEFAULT и NOT NULL. Вот так

CREATE TABLE T1 (
  ID_T1 NUMBER(10) NOT NULL ,
  CREATED TIMESTAMP DEFAULT SYSDATE NOT NULL
)

Table created

В общем, исторически не сложилось как-то у разработчиков с формальными грамматиками...

Комментарии

По поводу TOAD

По поводу TOAD немножко в сторону. Он написан не Ораклом, не по их заказу, и не только для этой СУБД, так что вопросы не к ним. Есть ряд других инструментов.
У Oracle же просто нет своих аналогов (ну не считать же Net Manager за таковой?). Так что дела даже ещё хуже.

По поводу TOAD

У Oracle же просто нет своих аналогов

SqlDeveloper? Вполне себе юзабельно. (на Java)
http://www.oracle.com/technetwork/develo...
И лицензионно чисто :-)

К слову сказать, пирмеров хороших программ для Oracle много больше:
PLSQLDeveleoper от Allround Automations (на Delphi)
OraDeveloper от CoreLab (на .NET)
SQL Manager for Oracle от EMS (на Delphi)

Такой вот эксперт....

Реверанс в сторону TOAD довольно странен. 8 из 10 Oracle Developer выбирают TOAD, и не потому, что кактус, а потому, что из текущих продуктов на данную тему, он, по мнению 8 из 10, лучший.

Изображение пользователя Serguei_Tarassov.

Был бы

Был бы TOAD лучшим, его бы использовали не только разработчики Oracle, поскольку версии для других СУБД есть. А так, на безрыбье и кактус - цветок.

Изображение пользователя Freeman.

На самом деле в

На самом деле в Oracle есть тип binary_integer. Появился не так давно и используется редко. А вот битового типа по-прежнему нет.

Изображение пользователя Serguei_Tarassov.

binary_integer

binary_integer - это тип PL/SQL, т.е. его можно использовать в процедурном расширении, а не в таблицах БД. При этом начиная с версии 10g он заменен на PLS_INTEGER.