Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];




Вниз

Проблема с record size в Firebird 0.9.4 


--Reporter--   (2002-02-12 23:27) [0]

Пытаюсь добавить несколько новых полей в одну из таблиц БД, не получается, выдает:


This operation is not defined for system tables.
unsuccessful metadata update.
new record size of 80174 bytes is too big.
TABLE STUDENT.


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

Спасибо



Леша   (2002-02-13 04:51) [1]

Перечисли поля



Alexandr   (2002-02-13 06:52) [2]

скорость работы не упадет если провильно сделать.
Ты про нормальзацию данных вообще слышал?



--Reporter--   (2002-02-13 08:39) [3]

Да вот все мои поля:


CREATE DOMAIN BYTE AS SMALLINT;
CREATE DOMAIN COURSE AS SMALLINT;
CREATE DOMAIN IDENT AS INTEGER;
CREATE DOMAIN IMAGE AS BLOB SUB_TYPE 0 SEGMENT SIZE 80;
CREATE DOMAIN MEMO AS VARCHAR(15000) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE DOMAIN MIDDLESTRING AS VARCHAR(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE DOMAIN NAME AS VARCHAR(100) CHARACTER SET WIN1251
DEFAULT "" COLLATE PXW_CYRL;
CREATE DOMAIN NUMBER AS INTEGER;
CREATE DOMAIN SMALLSTRING AS VARCHAR(10) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE DOMAIN STRING AS VARCHAR(255) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE TABLE STUDENT
(
ID IDENT NOT NULL,
FIRSTNAME NAME,
SECONDNAME NAME,
LASTNAME NAME NOT NULL,
BIRTHDAY DATE,
SEX BYTE,
MILITARY BYTE,
TYPEPMG BYTE,
PMG STRING,
BUILDING SMALLSTRING,
APARTMENT SMALLSTRING,
TELEPHONE STRING,
MOBILE STRING,
FAX STRING,
EMAIL STRING,
SERIES SMALLSTRING,
NUMBER MIDDLESTRING,
ROUMVD STRING,
DATEROUMVD DATE,
IDENTIF STRING,
REFFIRSTNAME NAME,
REFSECONDNAME NAME,
REFLASTNAME NAME,
REFSTATUS STRING,
CITY STRING,
KNOLLEGE MEMO,
FULLNAME COMPUTED BY (lastname ||" " || firstname || " "||secondname),
FAMILYSTATUS BYTE,
PHOTO IMAGE,
COMMENTS MEMO,
DRIVER IDENT,
REGION STRING,
NOTES MEMO,
COUNTRY IDENT,
ADDADRESS MEMO COLLATE PXW_CYRL,
GRADCITY STRING COLLATE PXW_CYRL,
GRADNAME STRING COLLATE PXW_CYRL,
GRADSTATUS IDENT,
GRADBEGINYEAR SMALLINT,
GRADLASTYEAR SMALLINT,
GRADSPECIALITY IDENT,
GRADCOURSE COURSE,
GRADGRUP SMALLSTRING COLLATE PXW_CYRL,
GRADAWARDS STRING COLLATE PXW_CYRL,
GRADDIRECTION IDENT,
PRIMARY KEY (ID)
);



А вот, что я хочу сделать, а не получается:


ALTER TABLE STUDENT
ADD GRADFORMOFLEARNING SMALLINT,
ADD GRADSTUDCARD STRING,
ADD GRADRECORDBOOK STRING,
ADD GRADAVERAGEBALL SMALLINT,
ADD ISTBEHAVIOUR SMALLINT,
ADD ISTPOSITION STRING,
ADD ISTMINSALARY STRING,
ADD ISTTEMPERAMENT SMALLINT,
ADD ISTADDWISH MEMO,
ADD ISTRESUME MEMO;


Про нормализацию слышал, что она нужна для уменьшения размера БД, удаления избыточности, но не для увеличения скорости работы с БД. (что то подобное вроде читал в Шумакове). Опровергните, если это утверждение неправильно...

Спасибо



Alexandr   (2002-02-13 09:20) [4]

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

Учиться учиться и учиться



Desdechado   (2002-02-13 10:24) [5]

а вот это:
CREATE DOMAIN MEMO AS VARCHAR(15000) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
- изврат!

заведи себе нормальный BLOB. в varchar такой размерности collate не имеет смысла, индекс по полю все одно не построишь.

кстати, и пропадет сообщение от большой длины записи :))

и последуй совету Александра



--Reporter--   (2002-02-13 16:49) [6]

>Desdechado © (13.02.02 10:24)

Я сделал так, чтобы можно было делать запросы типа CONTAINING и операции типа UPPER, насколько я знаю, с BLOB-ами такого нельзя делать...



--Reporter--   (2002-02-13 17:28) [7]

>Alexandr © (13.02.02 09:20)

А как бы вы организовали подобную базу? В принципе, кроме этой таблицы у меня в базе еще 20 таблиц, там у меня есть и foreign key"sы. В эту таблицу я просто накидал все записи, которые есть только в одном экземпляре для каждого студента, и не повторяются, то есть все те, с которыми нельзя установить связи с данной таблицей один ко многим, или многие к одному...

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

И еще, подскажите может, что можно почитать такого полезного по организации баз данных в электронном варианте?

Спасибо



--Reporter--   (2002-02-13 22:42) [8]

--Reporter-- (13.02.02 16:49) не проверил, Containing можно делать с BLOB-полями, но UPPER не работает :-(

Итак, в этой ситуации 2 вопроса:

1. Как преобразовать в уже существующей базе данных поле типа VARCHAR в поле типа BLOB, вместе с данными на чистом DDL (SQL)

2. Как можно заменить для BLOB-полей функцию Upper

--Reporter-- (13.02.02 17:28) остается на повестке дня

Спасибо



Desdechado   (2002-02-14 10:33) [9]

>с BLOB-полями UPPER не работает
Upper в SQL работает, похоже, только с латиницей даже в VARCHAR.
не экспериментировал, наверно это зависит от CHARACTER SET поля.
используй UDF - подойдет и для BLOB



--Reporter--   (2002-02-14 16:53) [10]

>Desdechado © (14.02.02 10:33)

Спасибо!

Переформулирую еще раз вопросы, не стейняйтесь отвечать, даже если знаете ответ хотя бы на один!

1. > Alexandr&All А как бы вы организовали подобную базу?

2. Подскажите может, что можно почитать такого полезного по организации баз данных в электронном варианте?

3. Как преобразовать в уже существующей базе данных поле типа VARCHAR в поле типа BLOB, вместе с данными на чистом DDL (SQL)

Спасибо



Romkin   (2002-02-14 19:00) [11]

Containing - case insensitive, кажется, нафиг тебе тогда UPPER?



Desdechado   (2002-02-15 11:32) [12]

2. http://emanual.ru/cgi-bin/show.pl?36



--Reporter--   (2002-02-17 00:49) [13]

Спасибо всем!!!!

Преобразовал в BLOB, все получилось!!!




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.017 c
1-43105           Noname2002            2002-02-28 10:39  2002.03.14  
Работа с компонентами


14-43148          Dima Kopachev         2002-01-29 00:35  2002.03.14  
Компаненты как у Netscape v6


3-42953           vopros                2002-02-15 13:04  2002.03.14  
Выскакивает ошибка Access Violetion..


14-43137          Helen                 2002-01-29 15:32  2002.03.14  
SQL запрос SQL запроса компонента ADOQuery! (D5, MSSQL)


4-43222           raiks                 2002-01-14 12:25  2002.03.14  
Как отследить попытку обращения к файлу?