例如,一个包含信用卡费用的表、一个包含信用卡的表和一个包含用户的表。
每笔费用仅与一张卡相关联,每张卡仅与一位用户相关联。一个用户可能有多个存档卡。
如果我将这些数据保存在 MySQL 数据库中的三个不同表中,如下所示:
收费:
---------------------------------------------
id | card | amount | description | datestamp
---------------------------------------------
5 | 2 | 50.00 | Example | 1369429422
牌:
------------------------------------------------------------------
id | user | name | number | cvv2 | exp_mm | exp_yy
------------------------------------------------------------------
2 | 1 | Joe Schmoe | 4321432143214321 | 555 | 1 | 16
用户:
-------------------------------------------
id | first_name | last_name | email
-------------------------------------------
1 | Joe | Schmoe | joe@schmoe.co
现在,假设我想访问一个用户,并收取费用。为了找到用户,我首先必须查找与费用关联的卡,然后查找与卡关联的用户。显然,在这样的示例中,速度可以忽略不计。但在其他情况下,我认为这是两个查询。
但是,如果我这样存储数据:
收费
----------------------------------------------------
id | card | user | amount | description | datestamp
----------------------------------------------------
5 | 2 | 1 | 50.00 | Example | 1369429422
那么费用将直接与用户相关联。然而,这是冗余信息,因为相同的数据存储在卡表中。
想法?