Проблемы с созданием таблицы после нормализации - PullRequest
1 голос
/ 09 ноября 2019

Мне было дано задание нормализовать заказ на продажу, создать реляционную схему и ввести данные в SQL-разработчик.

Я нормализовался до 3NF и получил это:

Клиент (Customer_ID, Customer_name) ... Первичный ключ = Customer_ID

Сотрудник (Employee_ID, Employee_name) ... Первичный ключ = Employee_ID

Sales_Order (Sales_order_ID, Employee_ID, Customer_ID, Sale_date, Order_total) ... Первичный ключ = Sales_order_ID ... Внешние ключи = Employee_ID, Customer_ID

Order_Line (Sales_order_ID, Product_ID, Количество, Line_total) ... Составной ключ = Sales_order_ID ... Внешний ключ = Product_ID

Product (Product_ID, Product_name, Product_price, Product_colour) ... Первичный ключ = Product_ID

Затем я ввел таблицы, это мой SQL:

CREATE TABLE EMPLOYEE(
    Employee_ID CHAR(3), 
    Employee_name CHAR(20),  
    CONSTRAINT pk_Employee PRIMARY KEY (Employee_name)
);

CREATE TABLE CUSTOMER(
    Customer_ID CHAR(5), 
    Customer_Name CHAR(20),  
    CONSTRAINT pk_Customer PRIMARY KEY (Customer_ID)
);

CREATE TABLE PRODUCT(
    Product_ID CHAR(5),
    Product_Name CHAR(30),
    Product_Colour CHAR(10),
    Product_Price CHAR(5),
    CONSTRAINT pk_Product PRIMARY KEY (Product_ID)
);

CREATE TABLE SALES_ORDER(
    Sales_order_ID CHAR(6),
    Employee_ID CHAR(3),
    Customer_ID CHAR(5),
    Sale_Date CHAR(10),
    Order_total CHAR(7),
    CONSTRAINT pk_Order PRIMARY KEY (Sales_order_ID),
    CONSTRAINT fk_Order FOREIGN KEY (Employee_ID) REFERENCES EMPLOYEE (Employee_ID),
    FOREIGN KEY (Customer_ID) REFERENCES CUSTOMER (Customer_ID)
);

CREATE TABLE ORDER_LINE(
    Sales_order_ID CHAR(6),
    Product_ID CHAR(5),
    Quantity CHAR(3),
    Line_total CHAR(5),
    CONSTRAINT pk_Order_Line PRIMARY KEY (Sales_order_ID),
    FOREIGN KEY (Product_ID) REFERENCES PRODUCT (Product_ID)
);

IЯ могу ввести таблицы Employee, Customer, Product, Sales_order, но не могу ввести Order_line

Мне сказали, что таблица или представление не существует!

Чтоs это значит?

Правильно ли я нормализовался?

Неправильно ли я спроектировал реляционную схему?

Любая помощь будет высоко оценена

1 Ответ

0 голосов
/ 10 ноября 2019

Когда я запускаю ваш код в этой дБ скрипке , создание таблицы SALE_ORDER завершается неудачно со следующим сообщением:

ORA-02270: нет соответствующего уникального или первичного ключадля этого списка столбцов

Это из-за этого внешнего ключа:

CONSTRAINT fk_Order FOREIGN KEY (Employee_ID) REFERENCES EMPLOYEE (Employee_ID),

Основная проблема заключается в том, что вы определили Employee_name как первичный ключ таблицы EMPLOYEE.

CREATE TABLE EMPLOYEE (
    Employee_ID CHAR(3), 
    Employee_name CHAR(20),  
    CONSTRAINT pk_Employee PRIMARY KEY (Employee_ID)
);

Это не похоже на разумный вариант. В реальной жизни два разных сотрудника могут иметь одинаковые имена. Вместо этого вы, вероятно, захотите использовать Employee_ID в качестве первичного ключа для EMPLOYEE.

. Рассмотрите это определение для таблицы EMPLOYEE:

CREATE TABLE EMPLOYEE (
    Employee_ID CHAR(3), 
    Employee_name CHAR(20),  
    CONSTRAINT pk_Employee PRIMARY KEY (Employee_ID)
);

. С этой новой настройкой всетаблицы созданы успешно. Теперь вы можете вставить свои данные.

Демонстрация на DB Fiddle


Примечание: я вижу проблемы с таблицей ORDER_LINE:

  • первичный ключ должен быть Order_line_ID вместо Sales_order_ID

  • Sales_order_ID должен иметь ограничение внешнего ключа, ссылающееся на SALE_ORDER(Sales_order_ID).

Рассмотрим это новое определение для ORDER_LINE:

CREATE TABLE ORDER_LINE(
    Order_line_ID CHAR(6),
    Sales_order_ID CHAR(6),
    Product_ID CHAR(5),
    Quantity CHAR(3),
    Line_total CHAR(5),
    CONSTRAINT pk_Order_Line PRIMARY KEY (Order_line_ID),
    FOREIGN KEY (Product_ID) REFERENCES PRODUCT (Product_ID),
    FOREIGN KEY (Sales_order_ID) REFERENCES SALES_ORDER(Sales_order_ID)
);
...