Задать вопрос

Как правильно организовать внешние ключи в MySQL?

Есть две таблицы..первая таблица эта "Люди",где буду содержатся :
CREATE TABLE peoples(
id_people INT(255) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARACHAR(15),
surname VARACHAR(15),
patronymic VARACHAR(15)
);


И вторая таблица собственно "Комментарии" этих самых пользователей:
CREATE TABLE comments(
id_comment INT(255) NOT NULL AUTO_INCREMENT PRIMARY KEY,
comment TEXT(),
...(и как здесь связать?)
);


Внешний ключ как предполагается будет id_people соответственно,и хотелось бы понять как лучше всего организовать эту связку.

Следующий вопрос,как организовать передачу этого самого id_people в таблицу комментарии?Я так понимаю мы обращаемся к двум таблицам,причем id_people надо как то передать в таблицу с отзывами,и как это сделать?функциями mysql(что-то типо LAST_INSERT_ID),либо хранимыми процедурами,или еще как.

Заранее благодарю!
  • Вопрос задан
  • 9143 просмотра
Подписаться 5 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
10255 людей? Где же Вы столько наберёте?
Создание внешнего ключа:
ALTER TABLE `comments` 
    ADD COLUMN `peoples_id` INT(255) NOT NULL AFTER `comment`,
    ADD INDEX `peoples_id_idx` (`peoples_id` ASC);

ALTER TABLE `comments` 
    ADD CONSTRAINT `comments_peoples`
        FOREIGN KEY (`peoples_id_fk`)
        REFERENCES `peoples` (`id_people`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION;

В зависимости от того, что укажете в ON DELETE и ON UPDATE будет меняться поведение базы при попытке удалить запись в `peoples` или изменить `peoples`.`id_people`.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Vicom
Следующий вопрос,как организовать передачу этого самого id_people в таблицу комментарии?

вопрос поставлен не совсем корректно, но, где-то уже через полгода Вы даже не будете мыслить подобным образом, так что проехали. думаю, Вам нужна информация о возможности делать условную выборку из одной таблицы по найденному значению из другой. если так, то копайте в сторону JOIN, на днях осилил, 20 ссылок, небольшое перестроение головы и временная смена рода мозговой деятельности помогают, если сразу не воткнёте.

PS чтобы подойти с нужной стороны определите сначала для себя в голове такие понятия как:
- реляционная СУБД
- структура таблицы реляционной СУБД
- поля таблицы
- колонки таблицы
- внешний ключ (одна из тех самых колонок, связывающий те самые поля одних таблиц с другими через их значение)

доки из моих закладок по JOIN
100 различных вариантов толкования одного и того же (максимально доходчивых для меня)
- MySQL немного о JOIN'ах
- Наглядное объяснение принципа объединения таблиц в...
- Объяснение SQL объединений JOIN: LEFT/RIGHT/INNER/OUTER
- MySQl: использоваение операторов JOIN на примерах
- Разработка → MySQL и JOINы

ну и когда подтянитесь уже - Top 20+ MySQL Best Practices

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

удачи!
Ответ написан
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
При создании таблицы:

CREATE TABLE comments(
id_comment INT(255) NOT NULL AUTO_INCREMENT PRIMARY KEY,
comment TEXT not null,
id_people int(8) unsigned not null,
foreign key(id_people) references peoples(people_id) on update cascade on delete cascade);


Ну или как товарищ выше предложил.

ЗЫ Не путаетесь в таких наименованиях? First, Middle, Last name не лучше? )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы