困在mysql数据库中的多对多关系

时间:2013-03-16 11:37:22

标签: mysql database many-to-many

我正在做一个简单的购物应用程序作为我的项目。我坚持要保持多对多的关系。

我必须在一些有关系的表中存储用户事务的所有细节。以下是一些重要的专栏。

User_Id -- Foreign key from user table
Associated_Product_Id -- Foreign key from product table
Associated_Product_Quantity -- Not Null

更简单

user1         product1         5 pieces
user1         product2         2 pieces
user1         product3         1 piece
user2         product1         2 pieces
user2         product3         3 pieces

这里一个用户可以购买许多产品,许多用户可以购买一种产品。所以我很困惑,如何管理这个表。我的意思是哪一个是主键。

我将管理这些信息的表数无关紧要。但我需要管理这些信息。任何人都可以粗略地管理这个问题。这样我才能朝那个方向努力。

感谢。

4 个答案:

答案 0 :(得分:1)

对于交易,您只需要一张表 - 就像您刚发布的那样。

如果您需要了解某个用户购买的产品,请在此表中查询User_Id,如果您需要知道某个产品的用户是哪个用户,则查询该表{{1} }。 (我假设你已经拥有了产品和用户的表,因为你在这里引用了ID。)

您当然应该添加一列Associated_Product_Id或类似的东西,以唯一地标识交易。

答案 1 :(得分:1)

由于您正在将购物应用程序作为项目进行,因此您可能需要考虑在架构中添加第四个表来保存订单。

您的表格可能如下所示:

Users
-----
UserID (PK)
... (Other user details)

Product
-------
ProductID (PK)
... (Other product details)

Order
-----
OrderID (PK)
UserID (FK)
OrderDate

OrderLine
---------
OrderID (PK)
ProductID (PK)
OrderQuantity

这样,您就可以查看用户在任何指定日期购买的产品的数量,而不是用户购买的产品数量。

答案 2 :(得分:0)

你需要三张桌子:

1)用户表 2)产品表 3)交易表

用户1:m交易 交易1:m产品

交易将需要用于链接用户和用户的密钥。产品

答案 3 :(得分:0)

MySQL不允许您仅在两个表中使用多对多关系。您必须为要关联的两个表创建第三个表。

第三个表将只包含产品和用户的外键(以及每个事务的ID)。

一个简单的例子是:

CREATE TABLE Product_User (
    trans_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    product_id INT NOT NULL, 
    user_id INT NOT NULL, 
    FOREIGN KEY (product_id) REFERENCES Product_table (productid), 
    FOREIGN KEY (user_id) REFERENCES User_table (userid)
);

使用表和id字段的相应名称。