Как исправить ошибку в DB Browser, где инструкция внешнего ключа вызывает пустую таблицу? - PullRequest
0 голосов
/ 03 ноября 2019

Попытка построить таблицы для проекта в DB Browser, и одна из моих таблиц создается без каких-либо столбцов атрибутов, абсолютно пустых.

Я пробным путем определил, что ошибочная инструкция является одной изназначения внешнего ключа (в частности, присвоение EMPLOYEE.emp_years в качестве ссылки внешнего ключа на RAISE.emp_years). Закомментировав эту строку, таблица строится полностью со всеми столбцами атрибутов. Но мне нужна эта строка.

CREATE TABLE PAYRATE (
rai_bump    DECIMAL (2, 2) NOT NULL,
bas_basepay DECIMAL (2, 2) NOT NULL,
pay_rate    DECIMAL (2, 2) NOT NULL,
PRIMARY KEY(rai_bump, bas_basepay)
);

CREATE TABLE BASEPAY (
emp_agerange    CHAR(20) NOT NULL,
bas_basepay     DECIMAL (2, 2) NOT NULL,
PRIMARY KEY(emp_agerange),
FOREIGN KEY(bas_basepay) REFERENCES PAYRATE(bas_basepay)
);


CREATE TABLE RAISE (
emp_years   INTEGER NOT NULL,
rai_bump    DECIMAL (2, 2) NOT NULL,
PRIMARY KEY(emp_years),
FOREIGN KEY(rai_bump) REFERENCES PAYRATE(rai_bump)
);

CREATE TABLE EMPLOYEE (
emp_num         INTEGER NOT NULL,
emp_fname       VARCHAR(20) NOT NULL,
emp_lname       VARCHAR(20) NOT NULL,
emp_years       INTEGER NOT NULL,
emp_agerange    CHAR(20) NOT NULL,
PRIMARY KEY(emp_num),
FOREIGN KEY(emp_years) REFERENCES RAISE(emp_years), /* <-- offender */
FOREIGN KEY(emp_agerange) REFERENCES BASEPAY(emp_agerange)
);

Таблица Employee должна иметь 5 атрибутов: emp_num, emp_fname, emp_lname, emp_years и emp_agerange. Когда я запускаю свой код без вышеуказанной строки, это то, что я получаю, но со строкой таблица сотрудника создается, но вообще не имеет столбцов. Я не получаю сообщений об ошибках. Он говорит, что он успешно работает как с ошибочной строкой, так и без нее.

1 Ответ

3 голосов
/ 04 ноября 2019

Я выяснил причину. После возникновения проблем при поиске и устранении ошибок, каждый раз, когда я обращался к таблице RAISE, я получал синтаксические ошибки. Я получил подозрение и посмотрел слово. Конечно же, поднять, если зарезервированное слово в SQLite. Это позволило мне создать таблицу с именем, но не позволило мне сослаться на нее, потому что она думала, что я ссылаюсь на функцию RAISE.

...