iphone - 数据库设计挑战

标签 iphone mysql database-design

我正在为 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/

相关文章:

iphone - 更改 NSManagedObject 属性而不触发委托(delegate)方法?

iphone - 在圆形叠加层中绘制文本

sql - 车辆识别码(VIN)设计

iphone - EXC_BAD_ACCESS (SIGSEGV) 崩溃

ios - 更改 iPhone 和 iPad 上的替代图标(setAlternateIcon for iPhone & iPad)

php/mysql 按第一个字符分组列表

php - 下拉值未提交到帖子数组

mysql - 发送电子邮件以编辑 MediaWiki

mysql - 将HTML放入数据库字段是错误的吗?

mysql - 产品与库存实体之间的关系