MYSQL моделирование отношений: дизайн и ОБНОВЛЕНИЕ / УДАЛЕНИЕ - PullRequest
2 голосов
/ 21 февраля 2012

Я пытаюсь полностью понять отношения и прошел много уроков.Тем не менее, я останавливаюсь на нескольких вещах (используя MySQLWORKBENCH): enter image description here 1. Каждый пользователь может загрузить продукт 2. Каждый продукт может иметь несколько категорий, ставок, рейтингов и т. Д. 3. Каждый пользователь может иметь несколько телефонных номеров (их больше,но это базовая настройка)

Это правильно?: 1 - я использовал отношение 1: n, поскольку каждый пользователь может загружать несколько продуктов.2 и 3. Я использовал отношение n: m, поскольку может быть несколько продуктов с несколькими категориями, ставками, оценками и т. Д.

УДАЛЕНИЕ / ОБНОВЛЕНИЕ: Я использовал ON UPDATE CASCADE и ONУДАЛИТЬ КАСКАД везде, где есть внешний ключ ... который является 'product', 'category_tags_has_products', 'bid_price_has_product', 'phone_has_user'.

Я пытался удалить продукт, подобный этому (php): mysql_query ("УДАЛИТЬ ИЗ ПРОДУКТА ГДЕ id = '$ id'");Я получаю ошибку 1054, которая является ошибкой внешнего ключа.Каковы лучшие практики здесь?Насколько я понимаю, мне не нужно делать какие-либо действия, кроме родительской таблицы?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

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

С этой целью я бы изменил ссылку user-> product на неидентифицирующую, что сделает user_id Внешним ключом вместо того, чтобы быть частью Первичного ключа.В рабочей среде ярлык для неидентифицирующего отношения 1: n является ключом «2» (где «4» обозначает).Это, в свою очередь, должно удалить поля user_id из таблиц, на которые ссылается продукт.

Когда вы удаляете продукт, он должен каскадно соединяться с 3 таблицами ссылок, на которые он ссылается.В настоящее время может случиться так, что это пытается удалить от пользователей также в зависимости от того, как настроен FK.Следующее должно каскадно удалять (при условии, что удаление является постоянным, и вы просто хотите очистить все связанные записи)

УДАЛИТЬ ИЗ ПРОДУКТА -> удаляет из любой таблицы с product_id в УДАЛИТЬ ИЗ - пользователь -> удаляет из любой таблицы сuser_id в

То же самое относится к телефону, рейтингу, bid_price, category_tags.

Я надеюсь, что если вы используете, если вам нужны какие-либо дополнительные указатели, не стесняйтесь кричать:)

1 голос
/ 21 февраля 2012

Отношения выглядят правильно.Чтобы узнать, что не так с вашим запросом, проверьте переменную $id.Или проверьте весь запрос и затем запустите его в консоли / phpMyAdmin / etc:

$query = "DELETE FROM product WHERE id='$id'";
var_dump($query);
mysql_query($query);

PS: и не забудьте удалить все данные, полученные от пользователей!Как это:

$id = mysql_real_escape_string($_GET['id']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...