Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

Как связать 2 таблицы в IB/FB ?   Найти похожие ветки 

 
Dimedrol   (2002-07-18 13:17) [0]

Коллеги, помогите сделать сабж.
Киньте пожалуйста простенький примерчик -
SQL создания 2-х маленьких табличек (3-4 поля не больше)
которые связаны между собой.
То есть интересует классический "relation" между таблицами...

А то что-то я пытаюсь делать, а у меня не получается.
1-я таблица создается ОК, а 2-ю не могу создать, грит
"Object ARTICLES is in use..."

Вот моя 1-я таблица

CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
PID INTEGER DEFAULT 0,
NUM NUMERIC (5, 2) DEFAULT 0 CHECK (NUM BETWEEN -256 AND 256),
CRC COMPUTED BY (PID + ID * NUM),
/*STATUS DOM1,*/
STATUS CHAR(2) CHECK (STATUS IN ("on", "off")),
MAT CHAR(5) [3:4],
IMAT SMALLINT [5:6],
AUTHOR CHAR(64) NOT NULL UNIQUE,
HEADER VARCHAR (128) NOT NULL UNIQUE,
LEAD VARCHAR (512) DEFAULT "No lead",
INSERTED TIMESTAMP DEFAULT "NOW",
PRIMARY KEY (ID)
);


А вот вторая, к-рую связать пытаюсь с 1-й по полю
AUTHOR

CREATE TABLE AUTHORS (
PID INTEGER DEFAULT 0,
NAME CHAR (64) NOT NULL,
FOREIGN KEY (NAME) REFERENCES ARTICLES (AUTHOR));




И вообще, очень часто возникают ошибки типа :

Unsuccessful execution...........
lock conflict on no wait transaction
unsuccessful metadata update.
object ARTICLES is in use.

особенно при КОММИТе транзакций.

О! а вот ща попытался убить таблицу ARTICLES
а он мне говорит :

This operation is not defined for system tables.
unsuccessful metadata update.
object ARTICLES is in use.
Changes will be rolled back...


Так что, она - системная ???
Ничего не понимаю... со вчерашнего дня...

ЧТО ГЛЮЧИТ ????!!!


PS
К стати, я перешел с QuickDesk на IBExpert.
Уж сильно больших изменений (типа - меньше глючит...) я не заметил.


 
Johnmen   (2002-07-18 13:39) [1]

Ну ты дал ! Строишь FK по какому-то непонятному полю, а не по Primary Key !

И вот это неясно
STATUS CHAR(2) CHECK (STATUS IN ("on", "off")),

Ж:))))))



 
Dimedrol   (2002-07-18 13:52) [2]

Я делал и так в таблице ARTICLES -

CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
....
AUTHOR CHAR(64) NOT NULL,
....
PRIMARY KEY (ID,AUTHOR)


Создаю другую

CREATE TABLE AUTHORS (
PID INTEGER DEFAULT 0,
NAME CHAR (64) NOT NULL,
FOREIGN KEY (NAME) REFERENCES ARTICLES (AUTHOR));


пишет -

This operation is not defined for system tables.
unsuccessful metadata update.
could not find UNIQUE INDEX with specified columns.


А теперь - так -

CREATE TABLE ARTICLES (
.....
AUTHOR CHAR(64) NOT NULL UNIQUE,
......
PRIMARY KEY (ID,AUTHOR)


прошел запрос...
КОММИТЮ
пишет -

Cannot commit transaction:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.
unsuccessful metadata update.
object ARTICLES is in use .



 
Johnmen   (2002-07-18 13:59) [3]

Ну ты опять даешь ! Строишь PK по двум полям и ссылаешься на него FK по одному !
Вообще, строится PK по одному полю. И FK должен на него ссылаться.


 
Cranium   (2002-07-18 14:01) [4]

1)FOREIGN KEY строится по первичному ключу родительской таблицы или если по нескольким полям, то поле с первичным ключем родительской таблицы должено обезательно входить в FOREIGN KEY

2) есть орграничение на длину поля в ключеннго в FOREIGN KEY мне болше чем 50 включить не удовалось........

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


 
Dimedrol   (2002-07-18 14:11) [5]

2 Johnmen еще даю :


CREATE TABLE ARTICLES (
ID INTEGER NOT NULL,
PID INTEGER DEFAULT 0,
NUM NUMERIC (5, 2) DEFAULT 0 CHECK (NUM BETWEEN -256 AND 256),
CRC COMPUTED BY (PID + ID * NUM),
STATUS CHAR(2) CHECK (STATUS IN ("on", "off")),
AUTHOR CHAR(64),
HEADER VARCHAR (128),
LEAD VARCHAR (512) DEFAULT "No lead",
INSERTED TIMESTAMP DEFAULT "NOW",
PRIMARY KEY (ID)
);


Создаю, коммитю - ОК.

Далее:


CREATE TABLE AUTHORS (
FID INTEGER NOT NULL,
PID INTEGER DEFAULT 0,
NAME CHAR (64) NOT NULL,
PRIMARY KEY (FID),
FOREIGN KEY (FID) REFERENCES ARTICLES (ID));


Создаю, коммитю , пишет -


Cannot commit transaction:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.
unsuccessful metadata update.
object ARTICLES is in use .




 
Johnmen   (2002-07-18 14:20) [6]

Ну что это такое !

PRIMARY KEY (FID),
FOREIGN KEY (FID) REFERENCES ARTICLES (ID));


 
Dimedrol   (2002-07-18 14:31) [7]

Вот пример, взятый из доки по ИБ (pdf) :
(только во 2-й таблице заменил домены на INTEGERы)


CREATE TABLE COUNTRY (COUNTRY char(10) NOT NULL PRIMARY KEY,
CURRENCY VARCHAR(10) NOT NULL);

OK.


CREATE TABLE JOB (
JOB_CODE INTEGER NOT NULL,
JOB_GRADE INTEGER NOT NULL,
JOB_COUNTRY CHAR(10) NOT NULL,
JOB_TITLE VARCHAR(25) NOT NULL,
PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY),
FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY)
);


Пишет -


Cannot commit transaction:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
lock conflict on no wait transaction.
unsuccessful metadata update.
object COUNTRY is in use .


Почему object COUNTRY is in use . ???!!!


 
Johnmen   (2002-07-18 14:39) [8]

Попробуй пример в IBConsole...


 
Dimedrol   (2002-07-18 15:10) [9]

Мой IBConsole даже не хочет подсоединяться к FireBird серверу...
Может старый...

Но это все - фигня.

Этот пример не работает даже в ISQL под Linux !!! 8-(((

Пишет то же самое -
object COUNTRY is in use .


 
Dimedrol   (2002-07-18 15:37) [10]

Коллеги, неужели никто не делал связанных таблиц ?!

ну киньте примерчик, плиз, своих работающих связанных таблиц, а ?!


 
Dimedrol   (2002-07-18 23:30) [11]

Коллеги !

После долгих и изнурительных поисков ответа,
я, кажется, пришел к решению... надеюсь ! ;-)

Дело в том что мне не давала все покая надпись -
object XXXXX is in use...
Что за фигня ?!

И все-таки я обратил внимание на то, что при проведении
всех моих вышеперечисленных действий, у меня
был открыт Линух, и запущено там ISQL ! С открытой базой...

Стоило мне зарыть сессию на Линухе, и оперировать только
из Виндузы, как все прошло !

К стати, среди той горы информации, что я перерыл в Сети,
в поисках ответа, было какое-то мимолетное упоминание
об "exclusive base using"... или чего-то в этом роде.

Так может, действительно, когда мы проводим такие операции -
читайте - проектирование базы данных, создание таблиц в ней
с подобными свойствами, мы должны быть единственными
юзерами... ?

Получается что так...

Или у кого-то другое мнение.
Буду рад обсудить. ;-)


 
Desdechado   (2002-07-19 11:56) [12]

однозначно, изменение метаданных ТОЛЬКО в монопольном режиме (при одной открытой сессии). это написано в доке по IB.


 
Dimedrol   (2002-07-23 13:24) [13]

Нууууу... спасибо.
тогда - все ясно.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.009 c
3-35208
Larisa
2002-07-23 20:46
2002.08.12
Default character set


1-35260
anod
2002-07-31 00:22
2002.08.12
TColor


14-35460
Огурцова Е. М.
2002-07-18 13:31
2002.08.12
Почта


4-35489
Валет
2002-06-03 16:36
2002.08.12
Поиск в StringList


1-35366
GTA 3
2002-07-30 16:01
2002.08.12
Запись и чтение из реестра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский