[英]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.