#oracle
Вопрос:
CREATE TABLE Car (Car_ID int PRIMARY KEY,
Serial_Number int, Make VARCHAR(255),
Model VARCHAR(255), Colour VARCHAR(255),
Year int, Car_for_Sale_Y_N VARCHAR (25));
CREATE TABLE Salesperson
(Salesperson_ID int primary KEY,
Last_Name VARCHAR (255),
First_Name VARCHAR (255));
CREATE TABLE Customer
(Customer_ID int PRIMARY KEY,
Last_Name VARCHAR (255),
First_Name VARCHAR(255),
Phone_Number VARCHAR(255),
Address VARCHAR (255),
City VARCHAR(255),
STATE_PROVINCE VARCHAR (255),
Country VARCHAR (255),
Postal_Code VARCHAR (255));
CREATE TABLE Sales_Invoice
(Invoice_ID int PRIMARY KEY, Invoice_Number VARCHAR (255),
Date DATE,
Car_ID int FOREIGN KEY REFERENCES Car(Car_ID),
Customer_ID int FOREIGN KEY REFERENCES Customer(Customer_ID));
Вывод: ORA-00904: : неверный идентификатор
Пожалуйста, помогите, что здесь не так, это не работает. В таблице Sales_invoice, когда я создаю внешние ключи, отображается ошибка, в чем проблема.
Комментарии:
1. Пожалуйста, отметьте только одну СУБД — не 3! Ошибки Oracle специфичны для Oracle, они не передаются другим базам данных.
2. Переименуйте поле «Дата» во что-нибудь другое и проверьте его еще раз!
Ответ №1:
Несколько предложений, если позволите.
- не используйте
varchar
, ноvarchar2
введите данные. Почему? Oracle рекомендует так- вы ведь не один из моих переодетых коллег, не так ли? Их
varchar2
колонки-это все(255)
, так что они уверены, что большая часть информации, которую они туда помещают, подойдет. Но тебе действительно это нужно? Почтовый индекс длиной 255 символов? Ну же, один, будь серьезен!
- вы ведь не один из моих переодетых коллег, не так ли? Их
- назовите все свои ограничения. Если вы этого не сделаете, Oracle создаст имя по умолчанию, которое выглядит так, как будто
SYS_C007858
вы понятия не имеете, что это такое на самом деле. Но, если его имя , напримерpk_car
,, вы будете знать, что это первичный ключ вcar
таблице - как было отмечено,
date
зарезервировано для типа данных, вы не можете использовать его в качестве имени столбца (хорошо, вы можете, если заключите его в двойные кавычки, но вы не должны).
Окончательно:
SQL> create table car
2 (car_id int constraint pk_car primary key,
3 serial_number int,
4 make varchar2(255),
5 model varchar2(255),
6 colour varchar2(255),
7 year int,
8 car_for_sale_y_n varchar2 (25));
Table created.
SQL> create table salesperson
2 (salesperson_id int constraint pk_salesper primary key,
3 last_name varchar2(255),
4 first_name varchar2(255));
Table created.
SQL> create table customer
2 (customer_id int constraint pk_cust primary key,
3 last_name varchar2 (255),
4 first_name varchar2(255),
5 phone_number varchar2(255),
6 address varchar2(255),
7 city varchar2(255),
8 state_province varchar2(255),
9 country varchar2(255),
10 postal_code varchar2(255));
Table created.
SQL> create table sales_invoice
2 (invoice_id int constraint pk_salinv primary key,
3 invoice_number varchar2 (255),
4 datum date,
5 car_id int constraint fk_salinv_car references car(car_id),
6 customer_id int constraint fk_salinv_cust references customer(customer_id));
Table created.
SQL>