繁体   English   中英

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

[英]Stuck at many-to-many relationship in mysql database

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

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

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

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

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

谢谢。

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

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

您当然应该添加一列Transaction_Id或类似的东西,以唯一地标识一个事务。

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

您的表可能看起来像:

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

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

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

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

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

你需要三个表:

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

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

交易将需要键来链接用户和产品

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字段的相应名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM