どのように私は重複するタプルを持つテーブルを正規化するだろうか?SQLの正規化
--------------------------------------
ID | Name | Email
-----------------------------------------
1 | John | [email protected]
2 | John | [email protected]
この場合、2人のユーザーが同じ名前とメールアドレスを持っています。
どのように私は重複するタプルを持つテーブルを正規化するだろうか?SQLの正規化
--------------------------------------
ID | Name | Email
-----------------------------------------
1 | John | [email protected]
2 | John | [email protected]
この場合、2人のユーザーが同じ名前とメールアドレスを持っています。
Brax:まず、テーブルが記述しているエンティティをよく見てください。重複情報は、同じテーブルに2つ(またはそれ以上)のエンティティを格納するという共通の兆候です。次にこれらを分割します。固有の値を見つけるために、group by、distinct、またはいくつかのアプリケーションロジックを使用してクエリを記述します。必要に応じて一意の制約を使用してこれを確認してください。これらのエンティティにプライマリキーがあることを確認します。
2番目:既存のテーブルに外部キー列を追加して、作成したばかりの新しいテーブルとの関係を形成できるようにします。外部キーテーブルを入力します。
第3:オフロードしたばかりの情報を含む列を別のエンティティテーブルにドロップします。
あなたの質問は非常に一般的なので、この回答もありますが、少なくとも少しは役立ちます。
タプが重複している場合、プライマリキーを持つことはできません。これは最初の正規形に必要です。
タプルを構成するフィールドを主キーにします。
これらのユーザーは同じ人物と見なされますか?おそらくユーザー1が登録され、その電子メールアドレスが破棄されたか誤って入力された場合、ユーザー2は同じ詳細を使用した)。それらが異なる人物であると思われる場合は、それらを一意に識別するために追加のデータを追加する必要があります。登録日。
2人のユーザーが同じ人物であると仮定して、まず2つの行のどちらを保持するかを決めます(たとえば、IDが最も小さいものを選択します)。次に、削除する行を参照する他の表の行をすべて検索します(この場合は2)。これらの外部キーをすべて更新し、代わりに1を指すようにします。次に、ID = 2の行を削除することができます。
これでデータが整理されましたので、スキーマを修正して再度これが起きないようにする必要があります。名前と電子メールに一意の制約を入れてください同じ電子メールを2人で使用することを許可しない場合は、電子メールで)。
問題の詳細を説明することから始めます。 –
私は正規化プロセスについて読みましたが、どうすれば使用できますか?正規化コマンドがありませんか? – brax
「正規化コマンド」があった場合、すべてのデータベースは正規化されます。それより少し複雑です。 – cHao