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

Вниз

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

 
Favorit   (2008-05-21 20:40) [0]

Подскажите почему
Вот мои таблицы
CREATE TABLE "TOVAR"
(
 "ID_TOVARA" SMALLINT NOT NULL,
 "TIP_TOVARA" CHAR(40),
 "KOL-VO_TOVARA" SMALLINT NOT NULL,
PRIMARY KEY ("ID_TOVARA")
);
и я создаю еще одну
CREATE TABLE "POSTYPLENIE"
(
 "ID_TOVARA" SMALLINT NOT NULL,
 "NUM_OF_SKLAD" "NUM_OF_SKLAD_TYPE",
 "DATA_POSTYPLENIYA" DATE NOT NULL,
 "SROK" SMALLINT NOT NULL,
 "PRICE" FLOAT,
PRIMARY KEY ("ID_TOVARA", "NUM_OF_SKLAD"),
FOREIGN KEY ("ID_TOVARA") REFERENCES TOVAR ("ID_TOVARA"),
FOREIGN KEY ("NUM_OF_SKLAD") REFERENCES TOVAR ("NUM_OF_SKLAD")
);
Но
could not find UNIQUE INDEX with specified columns

Есть же все праймери кейс!!!!!


 
Johnmen ©   (2008-05-21 21:26) [1]

Где определение домена?
В чем сакральный смысл типа SMALLINT?
И наконец - когда возникает данная ошибка?


 
Loginov Dmitry ©   (2008-05-21 22:58) [2]

> PRIMARY KEY ("ID_TOVARA", "NUM_OF_SKLAD"),


А что, один и тот же товар дважды на склад не сможет поступить?
Тогда на кой нужны 2 таблицы? Хватит одной.

Зачем всем полям вподряд вставлять NOT NULL? Впервую очередь это необходимо для первичного (зачастую и внешнего ключей). В остальных случаях - только проблем себе наживать (имхо).

Где в таблице TOVAR присутствует поле "NUM_OF_SKLAD"?
Что означает объявление поля  "NUM_OF_SKLAD" "NUM_OF_SKLAD_TYPE"?
Зачем использовать SMALLINT?
Зачем использовать CHAR?
Зачем повсюду вставлять кавычки?


 
palva ©   (2008-05-21 23:03) [3]

> ...REFERENCES TOVAR ("NUM_OF_SKLAD")
А что, в таблице TOVAR должно быть поле "NUM_OF_SKLAD", да еще иметь ключ Primary Key?
Но там уже есть другой Primary Key - или я что-то не понял?


 
Favorit   (2008-05-21 23:48) [4]

Извеняюсь я не скопировал...
Вот мои таблицы
SET SQL DIALECT 3;

/* CREATE DATABASE "Base" PAGE_SIZE 4096

DEFAULT CHARACTER SET  */
/* Domain definitions */
CREATE DOMAIN "NUM_OF_SKLAD_TYPE" AS SMALLINT
 CHECK (VALUE IN(1,2,3)) NOT NULL;

/* Table: POSTYPLENIE, Owner: SYSDBA */

CREATE TABLE "POSTYPLENIE"
(
 "ID_TOVARA" SMALLINT NOT NULL,
 "NUM_OF_SKLAD" "NUM_OF_SKLAD_TYPE",
 "DATA_POSTYPLENIYA" DATE NOT NULL,
 "SROK" SMALLINT NOT NULL,
 "PRICE" FLOAT,
PRIMARY KEY ("ID_TOVARA", "NUM_OF_SKLAD")
);

/* Table: REALIZATION, Owner: SYSDBA */

CREATE TABLE "REALIZATION"
(
 "ID_REALIZATORA" SMALLINT NOT NULL,
 "ID_TOVARA" SMALLINT NOT NULL,
 "NUM_OF_SKLAD" "NUM_OF_SKLAD_TYPE",
 "DATA_REALIZATION" DATE NOT NULL,
 "PRICE_OF_REALOZATION" FLOAT,
PRIMARY KEY ("ID_REALIZATORA", "ID_TOVARA", "NUM_OF_SKLAD")
);

/* Table: REALIZATOR, Owner: SYSDBA */

CREATE TABLE "REALIZATOR"
(
 "ID_REALIZATORA" SMALLINT NOT NULL,
 "NAME" CHAR(40),
 "ADDRESS" CHAR(50),
PRIMARY KEY ("ID_REALIZATORA")
);

/* Table: SKLAD, Owner: SYSDBA */

CREATE TABLE "SKLAD"
(
 "NUM_OF_SKLAD" "NUM_OF_SKLAD_TYPE",
 "TIP_SKLADA" CHAR(40),
 "SQUARE" FLOAT,
PRIMARY KEY ("NUM_OF_SKLAD")
);

/* Table: TOVAR, Owner: SYSDBA */

CREATE TABLE "TOVAR"
(
 "ID_TOVARA" SMALLINT NOT NULL,
 "TIP_TOVARA" CHAR(40),
 "KOL-VO_TOVARA" SMALLINT NOT NULL,
PRIMARY KEY ("ID_TOVARA")
);
ALTER TABLE "POSTYPLENIE" ADD FOREIGN KEY ("ID_TOVARA") REFERENCES TOVAR ("ID_TOVARA");
ALTER TABLE "POSTYPLENIE" ADD FOREIGN KEY ("NUM_OF_SKLAD") REFERENCES SKLAD ("NUM_OF_SKLAD");
ALTER TABLE "REALIZATION" ADD FOREIGN KEY ("ID_REALIZATORA") REFERENCES REALIZATOR ("ID_REALIZATORA");

/* Grant Roles for this database */

/* Grant permissions for this database */


 
Favorit   (2008-05-21 23:49) [5]

и у меня не получается
ALTER TABLE "REALIZATION" ADD FOREIGN KEY ("ID_TOVARA") REFERENCES POSTYPLENIE ("ID_TOVARA");
ALTER TABLE "REALIZATION" ADD FOREIGN KEY ("NUM_OF_SKLAD") REFERENCES POSTYPLENIE ("NUM_OF_SKLAD");
выдает ошибку
Unsuccessful metadata update
could not find UNIQUE INDEX with specified columns
Statement: ALTER TABLE "REALIZATION" ADD FOREIGN KEY ("ID_TOVARA") REFERENCES POSTYPLENIE ("ID_TOVARA")


 
Игорь Шевченко ©   (2008-05-21 23:57) [6]


> Statement: ALTER TABLE "REALIZATION" ADD FOREIGN KEY ("ID_TOVARA")
> REFERENCES POSTYPLENIE ("ID_TOVARA")


Ну так естественно - в таблице POSTYPLENIE первичный ключ из двух полей
> PRIMARY KEY ("ID_TOVARA", "NUM_OF_SKLAD")


а ты пытаешься FOREIGN KEY сделать из одного поля.
Так не бывает, либо вводи второе поле в таблицу REALIZATION, либо отказывайся от FOREIGN KEY



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

Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
2-1211452478
Павел
2008-05-22 14:34
2008.06.15
TStringList; в Дельфи 6 - где объявить?


15-1209529452
@!!ex
2008-04-30 08:24
2008.06.15
Как испоганить исходник??


15-1208969171
tesseract
2008-04-23 20:46
2008.06.15
Зарплата программиста.


15-1209568345
Foo Fighters
2008-04-30 19:12
2008.06.15
как отключить функцию автодетекта в звуковой карте?


15-1209827357
Pavia
2008-05-03 19:09
2008.06.15
Удаленный рабочий стол





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский