powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как хранить длинные строки?
20 сообщений из 20, страница 1 из 1
Как хранить длинные строки?
    #38523012
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть небольшая база Firebird 1.5 в день добавляется примерно ок 20 записей. Появилась потебность хранить в связи один к одному к каждой записи текст, примерно ок. 1000 знаков. Как это дело можно лучше разместить: varchar, blob, внешние файлы? Или еще какие нибудь варианты?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523017
Фотография kgb ussr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эта фразу разъясни:
Занудов...Появилась потебность хранить в связи один к одному к каждой записи текст, примерно ок. 1000 знаков...
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523021
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kgb ussrВот эта фразу разъясни:
Занудов...Появилась потебность хранить в связи один к одному к каждой записи текст, примерно ок. 1000 знаков...
А что тут непонятного? Связи?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523025
Фотография kgb ussr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занудовkgb ussrВот эта фразу разъясни:
пропущено...

А что тут непонятного? Связи?
Ну нет так нет. Может, кто-то что-то и понял.
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523026
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kgb ussrЗанудовпропущено...

А что тут непонятного? Связи?
Ну нет так нет. Может, кто-то что-то и понял.
Я интересуюсь у народа, как хранить длинные строки в базе данных( это если проще)
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗанудовЯ интересуюсь у народа, как хранить длинные строки в базе данных( это если
проще)
Как хочешь так и храни. Каждый способ имеет свои плюсы и минусы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523031
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЗанудовЯ интересуюсь у народа, как хранить длинные строки в базе данных( это если
проще)
Как хочешь так и храни. Каждый способ имеет свои плюсы и минусы.

Подскажи, какие могут быть минусы при хранении в varchar?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523034
Фотография kgb ussr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗанудовDimitry Sibiryakovпропущено...

Как хочешь так и храни. Каждый способ имеет свои плюсы и минусы.

Подскажи, какие могут быть минусы при хранении в varchar?
Никаких. Сплошные плюсы.
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523057
Занудовкакие могут быть минусы при хранении в varchar ?по ср с блобами только один: когда-нибудь не влезет .
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523060
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kgb ussrНикаких. Сплошные плюсы.
Ну, для размера в тысячу, пожалуй, да, особо минусов не припоминается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523063
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovkgb ussrНикаких. Сплошные плюсы.
Ну, для размера в тысячу, пожалуй, да, особо минусов не припоминается.

А при каком размере минусы будут заметны?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523071
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занудов,

Тебе ж написали. Когда не влезет в варчар.
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523090
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSeryЗанудов,

Тебе ж написали. Когда не влезет в варчар.
Я не про размеры varchar, а про возможные тормоза при выборке из базы.
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523096
Фотография kgb ussr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗанудовWildSeryЗанудов,

Тебе ж написали. Когда не влезет в варчар.
Я не про размеры varchar, а про возможные тормоза при выборке из базы.
Что ж тебе надо еще?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523097
ЗанудовЯ не про размеры varchar, а про возможные тормоза при выборке из базы.Искать что-нибудь пробовал (хотя бы тут, на форуме) ? ну, или самому сбацать тест какой - невыносимо больно, что ле ?
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523173
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что-то типа универсальной структуры, позволяющей хранить примечания к записям к любой таблице в базе данных.
Примечаний может быть несколько для одной записи.
Если тебе нужно только одно, перепиливай под себя. САМ.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
CREATE GENERATOR GENR$STR_ID;

CREATE TABLE TABL$STR (
    OBJ_ID       DOMN$PSTRING_50_ID,  -- Имя таблицы, для которой храним строку
    REC_ID       DOMN$PSTRING_50_ID,  -- ID-записи, для которой храним строку
    ID           DOMN$INTEGER_ID, -- Универсальный идентификатор
    NAME         DOMN$PSTRING, -- какое-то примечание к строке. может, тебе не надо.
    DECR         DOMN$BLOB_TEXT, -- сама строка.
    DATE_COMMIT  DOMN$DATETIME, -- дата добавления/изменения записи
    USER_ID      DOMN$PSTRING_50 -- пользователь, последним добавивший или редактировавший строку
);
/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/
ALTER TABLE TABL$STR ADD CONSTRAINT C_PK$STR_ID PRIMARY KEY (ID)
USING INDEX INDX$STR_ID;
/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE INDEX INDX$STR_DATE_COMMIT ON TABL$STR (DATE_COMMIT);
CREATE INDEX INDX$STR_OBJ_ID ON TABL$STR (OBJ_ID);
CREATE INDEX INDX$STR_REC_ID ON TABL$STR (REC_ID);
CREATE INDEX INDX$STR_USER_ID ON TABL$STR (USER_ID);
/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/
SET TERM ^ ;

CREATE OR ALTER TRIGGER TRIG$STR_ADIU_255 FOR TABL$STR
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 255
AS
BEGIN
   POST_EVENT 'TABL$STR';
END
^
CREATE OR ALTER TRIGGER TRIG$STR_BIU_200 FOR TABL$STR
ACTIVE BEFORE INSERT OR UPDATE POSITION 200
AS
BEGIN
  IF(NEW.DATE_COMMIT IS NULL)THEN NEW.DATE_COMMIT = CURRENT_TIMESTAMP;
  IF(NEW.USER_ID     IS NULL)THEN
    BEGIN
    NEW.USER_ID = RDB$GET_CONTEXT('USER_SESSION', 'DATABASE_USER');
    END
  IF(NEW.USER_ID     IS NULL)THEN
    BEGIN
    NEW.USER_ID = CURRENT_USER;
    END
END
^
CREATE OR ALTER TRIGGER TRIG$STR_BI_000 FOR TABL$STR
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  NEW.ID = GEN_ID(GENR$STR_ID, 1);
END
^
SET TERM ; ^
COMMIT;

/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_ADIU_255;
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_BIU_200;
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_BI_000;
COMMIT;


...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38523181
Занудов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PEAKTOPВот что-то типа универсальной структуры, позволяющей хранить примечания к записям к любой таблице в базе данных.
Примечаний может быть несколько для одной записи.
Если тебе нужно только одно, перепиливай под себя. САМ.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
CREATE GENERATOR GENR$STR_ID;

CREATE TABLE TABL$STR (
    OBJ_ID       DOMN$PSTRING_50_ID,  -- Имя таблицы, для которой храним строку
    REC_ID       DOMN$PSTRING_50_ID,  -- ID-записи, для которой храним строку
    ID           DOMN$INTEGER_ID, -- Универсальный идентификатор
    NAME         DOMN$PSTRING, -- какое-то примечание к строке. может, тебе не надо.
    DECR         DOMN$BLOB_TEXT, -- сама строка.
    DATE_COMMIT  DOMN$DATETIME, -- дата добавления/изменения записи
    USER_ID      DOMN$PSTRING_50 -- пользователь, последним добавивший или редактировавший строку
);
/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/
ALTER TABLE TABL$STR ADD CONSTRAINT C_PK$STR_ID PRIMARY KEY (ID)
USING INDEX INDX$STR_ID;
/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE INDEX INDX$STR_DATE_COMMIT ON TABL$STR (DATE_COMMIT);
CREATE INDEX INDX$STR_OBJ_ID ON TABL$STR (OBJ_ID);
CREATE INDEX INDX$STR_REC_ID ON TABL$STR (REC_ID);
CREATE INDEX INDX$STR_USER_ID ON TABL$STR (USER_ID);
/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/
SET TERM ^ ;

CREATE OR ALTER TRIGGER TRIG$STR_ADIU_255 FOR TABL$STR
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 255
AS
BEGIN
   POST_EVENT 'TABL$STR';
END
^
CREATE OR ALTER TRIGGER TRIG$STR_BIU_200 FOR TABL$STR
ACTIVE BEFORE INSERT OR UPDATE POSITION 200
AS
BEGIN
  IF(NEW.DATE_COMMIT IS NULL)THEN NEW.DATE_COMMIT = CURRENT_TIMESTAMP;
  IF(NEW.USER_ID     IS NULL)THEN
    BEGIN
    NEW.USER_ID = RDB$GET_CONTEXT('USER_SESSION', 'DATABASE_USER');
    END
  IF(NEW.USER_ID     IS NULL)THEN
    BEGIN
    NEW.USER_ID = CURRENT_USER;
    END
END
^
CREATE OR ALTER TRIGGER TRIG$STR_BI_000 FOR TABL$STR
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  NEW.ID = GEN_ID(GENR$STR_ID, 1);
END
^
SET TERM ; ^
COMMIT;

/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_ADIU_255;
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_BIU_200;
GRANT UPDATE, REFERENCES ON TABL$STR TO TRIGGER TRIG$STR_BI_000;
COMMIT;



Спасибо за материал. Структура уже есть, более простая.
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38524283
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, однажды пришла в голову "гениальная" идея хранить строки неизвестной длины как-то так:

Код: sql
1.
2.
3.
4.
5.
create table sometab (
  id bigint not null,
  str_short varchar(1000),
  str_long blob sub_type text
);



Запись производить, в зависимости от длины записываемой строки, либо в str_short, либо в str_long.
Выборку типа так: coalesce(str_short, str_long)

Для выборки можно вьюху сделать.

Навскидку, вижу только неудобство с сортировкой. Но какой смысл сортировать строки неизвестной длины ? Вряд ли там будет храниться что-то сортируемое.

Из плюсов: не плодятся блобы в базе без необходимости. На сколько я понимаю, если в блобе null, то он не занимает места и не "тормозит" выборки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38524305
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба МастеркеевичНа сколько я понимаю, если в блобе null, то он не занимает места и не "тормозит" выборки.
Даже если не нул, не тормозит выборку (на сколько я помню).
...
Рейтинг: 0 / 0
Как хранить длинные строки?
    #38524382
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занудовв день добавляется примерно ок 20 записей.
Занудовпримерно ок. 1000 знаков.Это очень мало очень коротких строк. вот когда будет несколько десятков миллионов в день и длиной от 8000 символов тогда приходи, бум думать.

А пока варчар прямо по месту, без изысков.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как хранить длинные строки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]