Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.048 c