SQL (Oracle): как улучшить логическую модель и исправить ошибки идентификатора? - PullRequest
0 голосов
/ 29 апреля 2018

Это логическая модель видеомагазина. Клиент одалживает копию в магазине.

логическая модель (см. Логическую модель)

После создания логической модели в сгенерированных последовательностях было 5 ошибок.

Некоторые из них:

удалить первичный ключ

-> Я не могу понять, почему следует удалять первичный ключ. Когда я удаляю первичный ключ "clientno" на клиентской таблице. Программное обеспечение «Разработчик оракула» не позволяет мне удалить первичный ключ.

неверный идентификатор

-> Погуглил информацию в интернете, но не смог понять.

Проблема в логической модели. Модель хочет проверить среднее видео, которое клиент позаимствовал. Какой популярный фильм на данный момент?

Это ошибки:

create table client
(
    clientno             number(8) not null,
    clientname           varchar2(30),
    clientadress         varchar2(50),
    clientclassification varchar2(30)
) 

Ошибка:

Ошибка SQL: ORA-00955: имя уже используется существующим объектом
00955. 00000 - «имя уже используется существующим объектом»

alter table client 
    add constraint client_pk primary key (clientno)  

Ошибка:

Ошибка SQL: ORA-02260: таблица может иметь только один первичный ключ
02260. 00000 - «таблица может иметь только один первичный ключ»
* Причина: самоочевидна.
* Действие: Удалить дополнительный первичный ключ.

alter table copy add constraint copy_pk primary key (copycode, client_clientno, movie_movieno)  

Ошибка:

Ошибка SQL: ORA-00904: «COPYCODE»: неверный идентификатор
00904. 00000 - «% s: неверный идентификатор»

alter table store add constraint store_pk primary key (storecode, storecode1)

Ошибка:

Ошибка SQL: ORA-02260: таблица может иметь только один первичный ключ
02260. 00000 - «таблица может иметь только один первичный ключ»
* Причина: самоочевидная.
* Действие: Удалить дополнительный первичный ключ.

alter table copy 
    add constraint copy_client_fk 
        foreign key (client_clientno) references client (clientno) 

Ошибка:

Ошибка SQL: ORA-00904: «CLIENT_CLIENTNO»: неверный идентификатор
00904. 00000 - «% s: неверный идентификатор»

alter table copy 
    add constraint copy_movie_fk 
        foreign key (movie_movieno) references movie (movieno)  

Ошибка:

Ошибка SQL: ORA-00904: «MOVIE_MOVIENO»: неверный идентификатор
00904. 00000 - «% s: неверный идентификатор»

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Каждая опубликованная вами ошибка очевидна и может быть легко исправлена, только если вы прочитаете и поймете, что говорит вам Oracle.

Один

create table client заканчивается

ORA-00955: имя уже используется существующим объектом

Очевидно, что вы не можете создавать два объекта с одинаковыми именами. Есть что-то , которое называется КЛИЕНТОМ (скорее всего, это таблица, которую вы забыли удалить до выполнения команды). Если вы не уверены, что это может быть, запустите

select * from user_objects where object_name = 'CLIENT';

и вы найдете это. Затем: либо отбросьте этот объект, либо переименуйте тот, который вы сейчас пытаетесь создать.

Два

По состоянию на

ORA-02260: таблица может иметь только один первичный ключ * Причина: очевидна. * Действие: Удалить дополнительный первичный ключ.

на самом деле нечего сказать ... самоочевидно , не так ли?

Три

ORA-00904: "COPYCODE": неверный идентификатор

означает, что вы использовали столбец COPYCODE в одной из ваших команд, в то время как этот столбец не существует в таблице, затронутой этой командой. Например, вы пытаетесь

alter table client modify copycode not null;

Если в таблице нет такого столбца, вы получите эту ошибку.


Я бы посоветовал вам пойти шаг за шагом: выполните одну команду, убедитесь, что все в порядке. Затем напишите другой, выполните его и убедитесь, что все в порядке. Переходите к следующему и так далее. Детские шаги.

0 голосов
/ 29 апреля 2018

Существует множество причин, по которым вы можете получить одну из этих ошибок. Но в целом? На самом деле есть только одно объяснение: вы запускаете этот сценарий в схеме, где вы (или кто-то еще) ранее запускали версию этого сценария и уже создали таблицы с этими именами (возможно, с разными проекциями).

Предполагая, что вы хотите заменить эту схему, вам нужно написать несколько операторов отбрасывания таблиц и запустить их перед запуском сценария. Или, возможно, вам нужен другой аккаунт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...