我很难找出组织数据库的最佳方法。有与手头的问题相关的三个表:user, good, and transaction
. 在理想情况下,每笔交易将包括与单个用户和单个商品的识别关系。但是处理多种商品的最佳方式是什么?(在我的例子中,用户可能会在一次交易中购买数百种不同的商品。)我是否应该简单地创建一个逗号分隔的列表并将其粘贴在一个TEXT
字段中?这似乎违背了数据库设计的传统智慧......
1 回答
除了列出的表和列之外,您还需要这些表和列: TRANSACTION_GOOD_MAPPING: Trnsctn_good_id (pk), transaction_id (fk to transaction table), good_id (fk to good table)
USER_TRANSACTION_MAPPING: user_trnsctn_id, user_id (fk to user table), tramsaction_id (fk into transaction table)
以上将允许您拥有许多交易的用户和与许多商品的交易。
这是一个示例查询,用于获取给定用户的给定交易的商品列表:
select good_id, good_name, good_desc from user u, good_g, transaction t, Transaction_good_mapping tgm, user_tramsaction_mapping utm 其中 u.user_id=utm.user_id 和 utm.transaction_id=tgm.transaction_id 和 g.good_id=tgm.good_id 和 u.user_id= 'someuserid' 和 tramsaction_id=some_tramsaction_id
注意:对于上述查询的最后两行,请确保在查询中使用变量替换以避免 SQL 注入。