たとえば、クレジット カードの料金を保持するテーブル、クレジット カードを保持するテーブル、およびユーザーを保持するテーブルを考えてみましょう。
各請求は正確に 1 つのカードに関連付けられ、各カードは正確に 1 人のユーザーに関連付けられます。ユーザーは、ファイルに複数のカードを持っている場合があります。
このデータを MySQL データベースの 3 つの異なるテーブルに保持するとしたら、次のようになります。
料金:
---------------------------------------------
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
ここで、料金が与えられたユーザーにアクセスしたいとしましょう。ユーザーにたどり着くには、まず請求に関連付けられたカードを検索し、次にカードに関連付けられたユーザーを検索する必要があります。明らかに、このような例では、速度は無視できます。しかし、他のシナリオでは、これは 2 つのクエリであると考えています。
ただし、次のようにデータを保存した場合:
料金
----------------------------------------------------
id | card | user | amount | description | datestamp
----------------------------------------------------
5 | 2 | 1 | 50.00 | Example | 1369429422
その後、料金はユーザーに直接関連付けられます。ただし、同じデータがcardsテーブルに格納されているため、これは冗長な情報です。
考え?