![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
primary key
gentos © (2007-08-06 15:25:00)Здрасте мастерам. Есть следующая ситуация. Имеется 2 таблички.
В одной табличке 2 кея. В другой есть полеIDDOCUMENTBODY NUMBER NOT nullпишу следующееCONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENTBODY) REFERENCES WDS$DOCUMENTBODY (ID)ругается и это не страно, как можно с одной таблички получить доступ к другой табличке , если у этой другой таблички 2 праймари кей вот, ниже представлени эти самый 2 мои табличкиREATE TABLE WDS$Documentsи вторая
(
ID NUMBER NOT NULL,
IDUSER NUMBER NOT NULL,
IDDOCUMENTTYPE NUMBER NOT null,
IDDOCUMENTBODY NUMBER NOT null,
COMM VARCHAR2(1000),
USERS VARCHAR2(100) NOT NULL,
TIME DATE NOT NULL,
CONSTRAINT PK_WDS$Documents PRIMARY KEY (ID),
CONSTRAINT FK_IDUSER FOREIGN KEY (IDUSER) REFERENCES WDS$USERS(ID),
CONSTRAINT FK_IDDOCUMENTTYPE FOREIGN KEY (IDDOCUMENTTYPE) REFERENCES WDS$DOCUMENTTYPE(ID),
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENTBODY) REFERENCES WDS$DOCUMENTBODY (ID)
);CREATE TABLE WDS$DocumentBody
(
ID NUMBER NOT NULL,
LVL NUMBER NOT NULL,
PICTURE BLOB NOT NULL,
CONSTRAINT PK_WDS$DocumentBody PRIMARY KEY (ID,LVL)
)
Sergey13 (2007-08-07 08:23:00) [1]> [24] gentos (06.08.07 16:59)
> так мне надо не в главную !!!
Не понятно что тебе вообще надо.
> [25] gentos (06.08.07 17:01)
Ты бы все таки купил себе книжку по БД. После прочтения можно вновь воспользоваться советом из [9] Sergey13 © (06.08.07 16:03)
gentos (2007-08-06 17:01:00) [2]в WDS$DOCUMENTS у меня будет
TdxDBGridLookupColumnдбгрида и потом через чайлдовскую таблицу я получу данные в главную ! :)
gentos (2007-08-06 16:59:00) [3]так мне надо не в главную !!!
Sergey13 (2007-08-06 16:56:00) [4]> [21] gentos (06.08.07 16:54)
ВСЕГДА вводится сначала в ГЛАВНУЮ (WDS$DOCUMENTS в твоем случае). Иначе никак.
gentos (2007-08-06 16:56:00) [5]или же так есть Табл1 - главная
Табл2 - чайлдовская
сначала я ввожу данные в чайлд , потом с чайлда беру в главную
где писать референс в чайлде или же в главной ? :)
gentos (2007-08-06 16:54:00) [6]
> Sergey13 © (06.08.07 16:35) [19]
вот если сделать вот так вот как вы сказали
CREATE TABLE WDS$DocumentBody
(
IDDOCUMENT NUMBER NOT NULL,
LVL NUMBER NOT NULL,
PICTURE BLOB NOT NULL,
CONSTRAINT PK_WDS$DocumentBody PRIMARY KEY (IDDOCUMENT,LVL)
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENT) REFERENCES WDS$DOCUMENTS (ID)
)
то вначале в какую таблицу необходимо вводить данные в таблицуWDS$DocumentBodyили же вWDS$DOCUMENTS?
Bel (2007-08-06 16:36:00) [7]> gentos (06.08.07 16:27) [18]
> CREATE TABLE WDS$DocumentBody
> ( ID NUMBER NOT NULL,
> LVL NUMBER NOT NULL,
> PICTURE BLOB NOT NULL,
> CONSTRAINT PK_WDS$DocumentBody PRIMARY KEY (ID,LVL) CONSTRAINT FK_IDDOCUMENTBODY
> FOREIGN KEY (ID,LVL) REFERENCES WDS$DOCUMENTS (IDDOCUMENTBODY,IDDOCUMENTLVL) )
> то есть вы это имеет ввиду ?
Имелось в виду:
FOREIGN KEY (ID) REFERENCES WDS$DOCUMENTS (ID)
Sergey13 (2007-08-06 16:35:00) [8]> [18] gentos (06.08.07 16:27)
Я бы сделал так
CREATE TABLE WDS$DocumentBody
(
IDDOCUMENT NUMBER NOT NULL,
LVL NUMBER NOT NULL,
PICTURE BLOB NOT NULL,
CONSTRAINT PK_WDS$DocumentBody PRIMARY KEY (IDDOCUMENT,LVL)
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENT) REFERENCES WDS$DOCUMENTS (ID)
)
Точнее я бы сделал свой искусственнй ключ ID, его бы сделал примари кеем, а ИДДокумента+страница сделал бы уникальным ключем. Плюс ИДДокумента - ссылка на Документ, как в скрипте.
gentos (2007-08-06 16:27:00) [9]
> Sergey13 © (06.08.07 16:24) [17]
CREATE TABLE WDS$DocumentBody
(
ID NUMBER NOT NULL,
LVL NUMBER NOT NULL,
PICTURE BLOB NOT NULL,
CONSTRAINT PK_WDS$DocumentBody PRIMARY KEY (ID,LVL)
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (ID,LVL) REFERENCES WDS$DOCUMENTS (IDDOCUMENTBODY,IDDOCUMENTLVL)
)
то есть вы это имеет ввиду ?
Sergey13 (2007-08-06 16:24:00) [10]> [14] gentos (06.08.07 16:21)
> по логике правильно
По чьей? По моей неправильно. Документ ОДИН, а страниц МНОГО. На каждую страницу будешь документ создавать?
gentos (2007-08-06 16:22:00) [11]
> Jeer © (06.08.07 16:12) [12]
сенкс, разобрался
Sergey13 (2007-08-06 16:22:00) [12]> [13] gentos (06.08.07 16:19)
> заработало
Правильно? Что-то меня сомнения берут.
ЗЫ: Машину с ручника снял, она и поехала. И никакого зажигания не надо. 8-)
gentos (2007-08-06 16:21:00) [13]Sergey13 © (06.08.07 15:52) [5]
а вот тут непонятно чего так ?
сначала создается в child таблице запись, а потом уже по айдишника чайлда вставляются данные в таблицуWDS$Documentsвот так вот будет, по логике правильно ... как бы слово references и заключает в себе ссылаться на что-то ... или как ? :)
gentos (2007-08-06 16:19:00) [14]
> Anatoly Podgoretsky ©
согласен читал неправильно
добавил просто еще одну колонку
IDDOCUMENTLVL NUMBER NOT null
и написал следующее
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENTBODY,IDDOCUMENTLVL) REFERENCES WDS$DOCUMENTBODY (ID,LVL)заработало
Jeer (2007-08-06 16:12:00) [15]
> gentos (06.08.07 16:07) [10]
>
>
Учи вражеский, а написано очень просто: PK один, но состоять должен не более чем из 32 полей, но может и из одного поля.
Ферштейн ?
Anatoly Podgoretsky (2007-08-06 16:11:00) [16]> gentos (06.08.2007 16:07:10) [10]
Опять неправильно читаешь, один составной ключ, не более чем из 32 колонок.
gentos (2007-08-06 16:07:00) [17]
> Sergey13 ©
A table can have only one primary key.
а потом пишут
In Oracle, a primary key can not contain more than 32 columns.
типа не больше 32 :), странно как-то и вот тут
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, . column_n)
тоже похоже что один можна :)
та да, а что остается, буду сидеть и думать
Sergey13 (2007-08-06 16:03:00) [18]> [7] gentos (06.08.07 15:59)
Ну, и в чем ты нашел противоречие?
> A table can have only one primary key.
> [8] gentos (06.08.07 16:01)
Ну да, начальники казлы, а мы белые и пушистые. Знакомая ситуация.8-)
Ты не спеши писать - сядь и подумай.
gentos (2007-08-06 16:01:00) [19]та я сам уже запутался , дают всякую фигню начальники , а сами не понимают чего хотят :), и вот и пишешь туда сюда обратно, одни дропы и альтеры :)
gentos (2007-08-06 15:59:00) [20]
> Anatoly Podgoretsky ©
What is a primary key?
A primary key is a single field or combination of fields that uniquely defines a record. None of the fields that are part of the primary key can contain a null value. A table can have only one primary key.
Note: In Oracle, a primary key can not contain more than 32 columns.
A primary key can be defined in either a CREATE TABLE statement or an ALTER TABLE statement.
Using a CREATE TABLE statement
The syntax for creating a primary key using a CREATE TABLE statement is:
CREATE TABLE table_name
(column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, . column_n)
);
http://www.techonthenet.com/oracle/primary_keys.php