Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

primary key


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо