我正在为 iphone 创建一个虚拟印章卡程序,但在实现我的数据库时遇到了问题。该计划本质上有一个主要积分系统,可以通过所有商家使用(有点像航空里程),但我也想跟踪您去过每个商家的次数
到目前为止,我已经为用户、商家和交易创建了 3 个主要表。
1) Users 表包含基本信息,如 user_id 和收集的总点数。
2) Merchants表包含了merchant_id, location, total points given等信息。
3) Transactions 表只是为每次有人签到每个商家时创建一个新行,并记录日期戳、用户名、商家名称和奖励积分。
因此,要了解您去过每个商家的次数,最基本的方法是查询用户和商家的整个交易表,这将为我提供您去过多少次的交易历史记录我去过那个特定的商家(这是完美的),但从长远来看,我觉得这对性能来说会很糟糕。
实现此目的的另一种直接但“愚蠢”的方法是在用户表中为每个商家创建一个列,并在其中保留运行总计。这似乎不合适,因为我将定期添加新的商家,并且每次发生这种情况时都需要为每个用户添加新的列。
我研究了 mySQL 数据库的一对多和多对多关系,但似乎无法提出非常具体的东西,因为我对 web/PHP/mySQL 开发非常陌生但我猜这就是我要找的...
我还考虑过为每个用户创建一个特殊的交易表,其中有一列用于商家,另一列用于访问次数。同样,不确定这是否是最有效的实现方式。
有人能指出我正确的方向吗?
最佳答案
从考虑不同选项并权衡每个选项的优缺点的意义上来说,您做的是正确的事情。
就我个人而言,我会使用 MerchantCounter 表,该表通过 id_merchant(例如)加入您的 Merchant 表,并且您明确地保持最新。
随着时间的推移,它不会变慢(不像事件搜索),也不会占用大量空间。
编辑:Janan,根据您的评论,不,我会使用单个 MerchantCounter 表。所以你有你的商家表:
id_merchant nm_merchant
12 Jim
15 Tom
17 Wilbur
您将添加一个额外的表 MerchantCounter(经过编辑以显示如何计算单个用户的总数):
id_merchant id_user num_visits
12 101 3
12 102 8
15 101 6007
17 102 88
17 104 19
17 105 1
您可以看到 id_merchant 如何将表链接到 Merchant 表,以及 id_user 如何链接到另一个 User 表。
关于iphone - 数据库设计挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966638/