Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

primary key   Найти похожие ветки 

 
gentos   (2007-08-06 15:25) [0]

Здрасте мастерам. Есть следующая ситуация. Имеется 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)
 )


 
gentos   (2007-08-06 15:28) [1]

может unique key ?


 
Sergey13 ©   (2007-08-06 15:31) [2]

> [0] gentos   (06.08.07 15:25)
> В одной табличке 2 кея

Не два, а составной из двух полей. Это разные вещи. Зачем кстати там 2 поля? Почему не просто ИД?


 
gentos   (2007-08-06 15:46) [3]

а у меня там будет следующее
ид = 1
лвл = 1
означает 1 страничка первого документа
1
2
означает 2 страничка 1 документа
.
.
.
n
m
означает m страничка n-го документа
документа же может состоять из нескольких страничек , вот и так приходится делать


 
Bel ©   (2007-08-06 15:50) [4]

> а у меня там будет следующее ид = 1лвл = 1 означает 1 страничка первого документа

Дык, тогда ты не с той стороны вторичный ключ делаешь. Главной таблицей должна быть Документ, а подчиненной - тело документа.


 
Sergey13 ©   (2007-08-06 15:52) [5]

> [3] gentos   (06.08.07 15:46)

Если я не запутался в твоих IDDOCUMENTBODY , то ты кажется перепутал что на что должно ссылаться. Не первая на вторую, а наборот.


 
Anatoly Podgoretsky ©   (2007-08-06 15:57) [6]

> gentos  (06.08.2007 15:25:00)  [0]

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


 
gentos   (2007-08-06 15:59) [7]


> 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


 
gentos   (2007-08-06 16:01) [8]

та я сам уже запутался , дают всякую фигню начальники , а сами не понимают чего хотят :), и вот и пишешь туда сюда обратно, одни дропы и альтеры :)


 
Sergey13 ©   (2007-08-06 16:03) [9]

> [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:07) [10]


> 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)
тоже похоже что один можна :)
та да, а что остается, буду сидеть и думать


 
Anatoly Podgoretsky ©   (2007-08-06 16:11) [11]

> gentos  (06.08.2007 16:07:10)  [10]

Опять неправильно читаешь, один составной ключ, не более чем из 32 колонок.


 
Jeer ©   (2007-08-06 16:12) [12]


> gentos   (06.08.07 16:07) [10]
>
>


Учи вражеский, а написано очень просто: PK один, но состоять должен не более чем из 32 полей, но может и из одного поля.
Ферштейн ?


 
gentos   (2007-08-06 16:19) [13]


> Anatoly Podgoretsky ©


согласен читал неправильно
добавил просто еще одну колонку
IDDOCUMENTLVL NUMBER NOT null
и написал следующее
CONSTRAINT FK_IDDOCUMENTBODY FOREIGN KEY (IDDOCUMENTBODY,IDDOCUMENTLVL) REFERENCES WDS$DOCUMENTBODY (ID,LVL) заработало


 
gentos   (2007-08-06 16:21) [14]

Sergey13 ©   (06.08.07 15:52) [5]
а вот тут непонятно чего так ?
сначала создается в child таблице запись, а потом уже по айдишника чайлда вставляются данные в таблицу WDS$Documents
вот так вот будет, по логике правильно ... как бы слово references и заключает в себе ссылаться на что-то ... или как ? :)


 
Sergey13 ©   (2007-08-06 16:22) [15]

> [13] gentos   (06.08.07 16:19)
> заработало

Правильно? Что-то меня сомнения берут.

ЗЫ: Машину с ручника снял, она и поехала. И никакого зажигания не надо. 8-)


 
gentos   (2007-08-06 16:22) [16]


> Jeer ©   (06.08.07 16:12) [12]


сенкс, разобрался


 
Sergey13 ©   (2007-08-06 16:24) [17]

> [14] gentos   (06.08.07 16:21)
> по логике правильно

По чьей? По моей неправильно. Документ ОДИН, а страниц МНОГО. На каждую страницу будешь документ создавать?


 
gentos   (2007-08-06 16:27) [18]


> 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:35) [19]

> [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, его бы сделал примари кеем, а ИДДокумента+страница сделал бы уникальным ключем. Плюс ИДДокумента - ссылка на Документ, как в скрипте.


 
Bel ©   (2007-08-06 16:36) [20]

> 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)


 
gentos   (2007-08-06 16:54) [21]


> 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 ?



 
gentos   (2007-08-06 16:56) [22]

или же так есть Табл1  - главная
Табл2 - чайлдовская
сначала я ввожу данные в чайлд , потом с чайлда беру в главную
где писать референс в чайлде или же в главной ? :)


 
Sergey13 ©   (2007-08-06 16:56) [23]

> [21] gentos   (06.08.07 16:54)

ВСЕГДА вводится сначала в ГЛАВНУЮ (WDS$DOCUMENTS в твоем случае). Иначе никак.


 
gentos   (2007-08-06 16:59) [24]

так мне надо не в главную !!!


 
gentos   (2007-08-06 17:01) [25]

в WDS$DOCUMENTS  у меня будет TdxDBGridLookupColumn дбгрида и потом через чайлдовскую таблицу я получу данные в главную ! :)


 
Sergey13 ©   (2007-08-07 08:23) [26]

> [24] gentos   (06.08.07 16:59)
> так мне надо не в главную !!!

Не понятно что тебе вообще надо.

> [25] gentos   (06.08.07 17:01)

Ты бы все таки купил себе книжку по БД. После прочтения можно вновь воспользоваться советом из [9] Sergey13 ©   (06.08.07 16:03)



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

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
15-1186253150
palva
2007-08-04 22:45
2007.09.02
что для программиста - развлечение, то для ламера - смерть


2-1186557316
dest81
2007-08-08 11:15
2007.09.02
ehlib


2-1186487400
Lucifer
2007-08-07 15:50
2007.09.02
Цвет строк в TMemo


15-1186059055
Dib@zol
2007-08-02 16:50
2007.09.02
Fraps must die


15-1185959643
Сатир
2007-08-01 13:14
2007.09.02
Не сохраняются настройки cxGrid, если не установлен Delphi