Здравствуйте, коллеги. Я довольно давно занимаюсь БД Firebird, но то, что увидел вчера, я не видел никогда вообще.
Дело вот в чём. У нас внедрена довольно известная в узких кругах система. Клиент в браузере, есть сервер приложений и backend в виде базы. В новой версии этой системы разработчики использовали ORM Hibernate. Система написана на дотнете 4, кроме FB поддерживает MS SQL, а также заявлена поддержка Oracle. Не смотрел в другие базы, но то, что я увидел в FB повергло меня в шок.
Всё, больше не буду распинаться, просто приведу DDL.
CREATE TABLE "User" (
ID BIGINT NOT NULL,
UID CHAR(16) CHARACTER SET OCTETS,
STATUS INTEGER,
USERNAME VARCHAR(255),
"Password" BLOB SUB_TYPE 1 SEGMENT SIZE 80,
FIRSTNAME BLOB SUB_TYPE 1 SEGMENT SIZE 80,
MIDDLENAME BLOB SUB_TYPE 1 SEGMENT SIZE 80,
LASTNAME BLOB SUB_TYPE 1 SEGMENT SIZE 80,
FULLNAME BLOB SUB_TYPE 1 SEGMENT SIZE 80,
EMAIL BLOB SUB_TYPE 1 SEGMENT SIZE 80,
BIRTHDATE TIMESTAMP,
EMPLOYDATE TIMESTAMP,
WORKPHONE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
MOBILEPHONE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
ROOMNUMBER BLOB SUB_TYPE 1 SEGMENT SIZE 80,
DESCRIPTION BLOB SUB_TYPE 1 SEGMENT SIZE 80,
LANGUAGE BIGINT,
SKYPE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
ICQ BLOB SUB_TYPE 1 SEGMENT SIZE 80,
JABBERID BLOB SUB_TYPE 1 SEGMENT SIZE 80,
AUTHPROVIDERGUID CHAR(16) CHARACTER SET OCTETS,
REPLACEMENTUSER BIGINT,
DUPLICATEMESSAGE SMALLINT,
ENDREPLACEMENT TIMESTAMP,
REPLACEMENTMODE INTEGER,
REPLACEMENT BIGINT,
ORGANIZATIONGROUPSHASH BLOB SUB_TYPE 1 SEGMENT SIZE 80,
ORGANIZATIONITEMSHASH BLOB SUB_TYPE 1 SEGMENT SIZE 80,
PHOTO BLOB SUB_TYPE 1 SEGMENT SIZE 80
);
CREATE TABLE CURRENCY (
ID BIGINT NOT NULL,
UID CHAR(16) CHARACTER SET OCTETS,
NAME BLOB SUB_TYPE 1 SEGMENT SIZE 80,
SHORTNAME BLOB SUB_TYPE 1 SEGMENT SIZE 80
);
Вы видите? ВСЕ строки в BLOB! В таблицах, обслуживающих интерфейс (пункты меню и т.п.) тоже все строки в BLOB. Система в процессе работы создаёт таблички. Так там тоже все строковые значения хранятся в BLOB. Вообще во всей базе. На данный момент там 302 таблицы...
Я, честно говоря, никогда не имел дело ни с Hibernate в частности, ни с ORM вообще. Я хочу понять: кто виноват? Кто так спроектировал? Разработчики нашей системы? Разработчики ORM Hibernate? Разработчики драйвера Firebird для Hibernate (если такое существует)?