MYSQL建模关系:设计和更新/删除

时间:2012-02-21 13:47:57

标签: php mysql relationships

我正在努力完全理解人际关系,并且经历了很多教程。我仍然徘徊在一些事情上(使用MySQLWORKBENCH): enter image description here 1.每个用户都可以上传产品 2.每个产品可以有多个类别,出价,评级等 3.每个用户都可以拥有多个语音 (还有更多,但这是基本设置)

这是正确的吗?: 1 - 我使用1:n关系,因为每个用户都可以上传多个产品。 2和3.我使用n:m关系,因为可能有多个产品有多个类别,出价,评级等。

删除/更新: 我在任何有外键的地方使用了ON UPDATE CASCADE和ON DELETE CASCADE ......即'product','category_tags_has_products','bid_price_has_product','phone_has_user'。

我试图删除这样的产品(php):mysql_query(“DELETE FROM product WHERE id ='$ id'”); 我收到1054错误,这是一个外键错误。 这里的最佳做法是什么?根据我的理解,我不应该在父表之外的任何其他地方进行删除吗?

感谢名单!

2 个答案:

答案 0 :(得分:1)

关系看起来正确。 要查找查询的错误,请检查$id变量。 或者检查整个查询,然后在console / phpMyAdmin / etc中运行它:

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

P.S。:并且不要忘记逃避用户获得的所有数据!像这样:

$id = mysql_real_escape_string($_GET['id']);

答案 1 :(得分:1)

您有很多识别关系,这意味着外键构成第二个表上主键的一部分。在大多数情况下,这不是必需的,并且仅在链接表等实例中非常有用。

为此,我将用户 - >产品链接更改为非标识,这将使user_id成为外键而不是主键的一部分。在工作台中,1:n非标识关系的快捷键是键'2'(其中'4'标识)。这反过来应该从产品链接到的表中删除user_id字段。

删除产品时,它应级联到链接到的3个链接表。目前,它可能会尝试从用户中删除,具体取决于FK的设置方式。以下应该级联删除(假设删除是永久性的,您只想清除所有链接的记录)

DELETE FROM product - >从product_id中的任何表中删除 DELETE FROM user - >从

中的user_id删除任何表

同样适用于phone,rating,bid_price,category_tags。

我希望如果你有需要,如果你需要任何进一步的指示,请随时大喊:)