2015-10-18 6 views
1

Я читаю книгу об электронной коммерции. В этой книге я нашел ниже код SQL:SQL Foreign Key

CREATE TABLE `orders` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `users_id` INT UNSIGNED NOT NULL, 
    `transaction_id` VARCHAR(45) NOT NULL, 
    `payment_status` VARCHAR(45) NOT NULL, 
    `payment_amount` INT UNSIGNED NOT NULL, 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    INDEX `date_created` (`date_created` ASC), 
    INDEX `transaction_id` (`transaction_id` ASC), 
    CONSTRAINT `fk_orders_users1` 
     FOREIGN KEY (`id`) 
     REFERENCES `users` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
) ENGINE = InnoDB DEFAULT CHARSET=utf8; 

В книге говорится, что CONSTRAINT бы предотвратить вставку «users_id», который не совпадает с «идентификатор» в «пользователи» таблицы. Читая код, я считаю, что книга ошибочна, потому что я считаю, что этот код предотвратит вставку «id» (в таблицу «заказы»), которая не соответствует полю «id» (в таблице пользователи). Я не ошибаюсь?

Извините за плохой английский. Я не американец, и стараюсь изо всех сил ...

+1

Да, вы правы. – lad2025

+0

Код должен читать 'foreign key (user_id)', а не 'foreign key (id)'. –

+1

В качестве примечания: вы можете связаться с автором или издателем, который может внести исправление в будущих версиях. –

ответ

1

Исправленный код:

CREATE TABLE `orders` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `users_id` INT UNSIGNED NOT NULL, 
    `transaction_id` VARCHAR(45) NOT NULL, 
    `payment_status` VARCHAR(45) NOT NULL, 
    `payment_amount` INT UNSIGNED NOT NULL, 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    INDEX `date_created` (`date_created` ASC), 
    INDEX `transaction_id` (`transaction_id` ASC), 
    CONSTRAINT `fk_orders_users1` 
     FOREIGN KEY (`users_id`) 
     REFERENCES `users` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
) ENGINE = InnoDB DEFAULT CHARSET=utf8; 
+0

Спасибо за помощь! – yuridamata