数据库设计挑战

时间:2010-10-19 08:47:26

标签: iphone mysql database-design

我正在为iphone创建一个虚拟印章卡程序,并且遇到了实现我的数据库的问题。该程序基本上有一个主要点系统,可以通过所有商家(类似航空里程),但我也想跟踪你去过每个商家的次数 < / p>

到目前为止,我已经为用户,商家和交易创建了3个主要表格。

1)用户表包含user_id和收集的总点数等基本信息。

2)商家表包含的信息包括merchant_id,location,total points。

3)每当有人检查每个商家时,交易表只会创建一个新行,并记录日期戳,用户名,商家名称和获得的分数。

因此,找出您去过每个商家的次数的最基本方法是查询用户和商家的整个交易表,这将为我提供您有多少次的交易历史记录。曾经去过那个特定的商人(这是完美的),但从长远来看,我觉得这对于表演来说会很糟糕。

用于实现此功能的另一种简单而又“愚蠢”的方法是在EACH商家的users表中创建一个列,并保持运行总计。这似乎不合适,因为我将定期添加新商家,并且每次发生这种情况时都需要为每个用户添加新列。

我已经研究了mySQL数据库的一对多和多对多关系,但似乎无法提出一些非常具体的内容,因为我对web / PHP / mySQL开发非常陌生但我猜这就是我要找的......

我还想过为每个用户创建一个特殊的交易表,其中包含商家列和另一个访问次数的列。同样,不确定这是否是最有效的实现。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

在思考不同选择的意义上,你正在做正确的事情,并衡量每个选项的好坏。

就个人而言,我会使用一个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表。