2012-02-02 15 views
2

私は数百万のレコード(行)を持つテーブルを持っています。 この表には、mail_toという表の列があります。 各レコードに対応してメーリングリストがあり、このメイルリストにメーリングリストの情報が格納されています。 私のシステムの現在の実装では、メーリングリストをコンマ区切りのメールIDのリストとして保存しています。例えばデータベース/ MySQLにメーリングリストを保存する

は、私はレコードに対応するメーリングリストを取得する場合、現在の実装では正常に動作します

 | Column A | Column B |........ | mail_to      | 
    | Record 1 | abc  |   | [email protected],[email protected] | 

スクリプションデータをテーブルを考えてみ 。しかし、[email protected]に対応するレコードを検索する場合は、クエリが遅すぎます。私はスクリプションデータの列Nに列Aの保存

だったと思うし、その後、別のテーブルにidを郵送でき

一つの方法は、ユーザーの電子メールデータ との情報を格納する第三のテーブルを言います参加する。

しかし、クエリを実行するたびに2つの結合が存在するため、それが改善されるかどうかはわかりません。

このメーリングリストを保存するには、より良い方法を提案する人がいますか、どちらが優れているか評価するのに役立ちます。どんな助けもありがとう。

ありがとうございます

答えて

0

あなたは3NFに違反していますが、両方のバリエーションを保存することができます。しかし、スピードを探しているなら、いくつかの非正規化が役に立ちます。

いくつかの処理に古い連結メールリストを使用し、新しいマルチテーブルスキーマを使用して高速検索することができます。

0

まずオフ

  • データベースが参加するように設計されています。
  • データベースは、部分文字列を抽出するためにCSVデータをスキャンするように設計されていません。

現在のデザインは、正規化の最初のルールを破っています。繰り返すグループはありません。

あなたが述べたように、あなたは(UQ =一意の)このようなものを持っている必要があり

購読

  • SubscriptionDataID(PK)
  • ColumnB
  • ColumnC
  • ...

USEREMAIL

  • EmailDetailID(PK)
  • SubscriptionDataID(FK)
  • のEmailAddress(UQ)
+0

GBNこんにちは、コメントをありがとう、私は提案理由ユーザーが複数のサブスクリプションを持つことができるためです。私はあなたの提案したスキーマでどのようにそれを行うことができるか分かりません。 –

+0

@amitmodi:それはあなたの質問ではっきりしない... – gbn

+0

私は明示的に言及していないが、 "しかし、私は[email protected]に対応するレコードを検索する場合は、クエリが遅すぎることに同意する。 "同じユーザーに属する複数のレコードが存在することを指定します。 –

関連する問題