0

私は、ユーザーが単一のカテゴリ(つまり、「本」)に従ってさまざまなメーリングリストにサインアップできるサブスクリプション機能を構築しています。

MySQLでテーブルを設計する際に、次の2つのオプションに出くわしました。

オプション1

/* Table 1 */
Books
    Email

/* Table 2 */
Magazines
    Email

各ユーザーは、複数のリストをサブスクライブできます。

オプション2

/* Table 1 */
All Categories
    Email
    Category_ID

/* Table 2 */
Category_ID
    Category

基本的に、すべての電子メールのマスターテーブルからカテゴリIDを相互参照しています。その表では、ユーザーが複数のカテゴリにサブスクライブできるため、電子メールが繰り返される可能性があります。データベーススキーマの設計の経験はありませんが、データベース内の実際の文字列を参照するのではなく、各カテゴリにIDを付けたいと思います。

どちらに行きますか?カテゴリIDを相互参照する方が速いですか、それとも各カテゴリを独自のテーブルに分割する方が速いですか?(各カテゴリに新しいコメントが入ったときにユーザーに通知するために、長いリストを電子メールで送信していると仮定します)。

4

1 に答える 1

0

2番目のオプションは、複数のテーブルにデータ(電子メール)を複製​​しないため、より正規化された形式です。2番目のオプションをさらに進めて、ユーザーテーブルを作成し(間違いなく将来的には単なる電子メール以上のものを保存する必要があるため)、ユーザーのUserIDをeではなく最初のテーブルに保存します。 -メールアドレス。これにより、ユーザーが電子メールアドレスを更新する必要がある場合に、複数のテーブル(オプション#1のように)または単一のテーブル内の複数のレコード(オプション#2)を更新する必要がなくなります。非正規化(オプション#1)は、クエリを超高速(結合なし)にする必要がある場合は問題ありませんが、INSERT / UPDATE/DELETE操作に関しては多くの欠点があります。あなたの場合、上記の理由で変更されたオプション2を選択します。

于 2012-07-23T18:20:04.090 に答える