我正在做一个简单的购物应用程序作为我的项目。我坚持要保持多对多的关系。
我必须在一些有关系的表中存储用户事务的所有细节。以下是一些重要的专栏。
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
这里一个用户可以购买许多产品,许多用户可以购买一种产品。所以我很困惑,如何管理这个表。我的意思是哪一个是主键。
我将管理这些信息的表数无关紧要。但我需要管理这些信息。任何人都可以粗略地管理这个问题。这样我才能朝那个方向努力。
感谢。
答案 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字段的相应名称。