Нужна помощь в настройке отношения внешнего ключа в БД MySQL - PullRequest
1 голос
/ 23 ноября 2010

Таким образом, я должен InnoDB таблицы (продукты) и (категории). Я хотел установить связь между полем «Категория» в таблице «Продукты» и «Идентификатором категории» в таблице «Категории».

Но при попытке создать FK он только позволит мне выбрать первичный ключ "ProductsId" в таблице "Продукты" и сопоставить его с PK "CategoryId" в таблице "Категории".

Возможно, мне не хватает способа / причины для установки внешнего ключа. Мои мысли и скажите мне, если я ошибаюсь:

1) Требуется, чтобы продукт добавлялся в категорию при добавлении, категория должна существовать или вы должны сначала создать ее. Вы не можете удалить категорию, если не выполните какую-либо задачу (программно или на сервере БД), чтобы удалить продукты из категории, которую вы хотите удалить.

2) Я ожидал, что значение CategoryId будет сохранено в поле «Категория» таблицы «Продукты». Тогда при отображении в моем представлении, нужно будет искать поле Categories.Name по значению CategoriesId.

EDIT: Итак, я понимаю, что два поля, используемые во внешних ключах, должны быть одинакового размера, типа и т. Д. Однако, как работает связывание ProductId и CategoryId в контексте с тем, что я упомянул выше, я хочу сделать. Когда я создал FK между ProductId и CategoryId, я не позволил мне добавить запись о продукте.

Кроме того, поля «Имя категории» и «Категория продукта» имеют одинаковый тип, размер и т. Д., Но я не могу выбрать их на вкладке внешнего ключа?

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

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Хорошо, к сожалению, я должен ответить на свои вопросы. Причина большинства моих технических проблем заключается в том, что область, которую вы пытаетесь создать, «должна быть проиндексирована».

Сложная проблема, с которой я столкнулся, заключалась в том, что мне нужно было избавиться от действительного поля varchar «Категория» в таблице «Продукты» и создать поле CategoryId, в котором было бы только значение, существующее в поле «CategoryId» таблицы категорий.

Теперь мне просто нужно сослаться на поле Categories.Name через значение Products.CategoryId.

По крайней мере, это то, что я понял.

1 голос
/ 23 ноября 2010

Если вы находитесь в Workbench, убедитесь, что типы, длины и атрибуты обоих столбцов, участвующих в FK, одинаковы.

...