2012-02-05 129 views
1

二つのフィールドに同じレコードを維持したいですいけない私は2つのテーブル</p> <p>の1- <strong>ユーザー</strong>(ニュースサイトでユーザー登録を)持っている/データベース内のテーブルは、私がシナリオ</p> <p>私はニュースのWebアプリケーション を持って、次のしている

2- コメントテーブルとコメントテーブル内の一部のフィールド

Comments(Comments against any news) 
    userID (which user comment on agaist this news) // it is foreign key 
    NewsID 
    UserName(same as userID which user comment on agaist this news) varchar // this field using for non register users 
01が以下の通りであります

シナリオ1: 登録ユーザのコメントは、私はnewsidとコメントテーブルにユーザID とコメントを挿入する場合は、ユーザ名は、この場合にヌルである

シナリオ2: 場合、非登録ユーザ(またはあなたがゲストに言うことができます)私はuserIDではないユーザーIDを使用していますこの場合、UserIDはnullです

私は1つはユーザーテーブルに2つの場所を記録し続けたいと二番目です コメント欄のUserName欄のユーザー名フィールド 提案するもの

答えて

1

登録されていないユーザーを製造し、それらをユーザーテーブルに入れて、同じ情報を使用し続けるようにCookieとリンクすることができます。 StackOverflowが匿名ユーザーを処理する方法と似ていると思います。

あなたのデザインには大きな問題はありません。ことは、正確に二つのうちの一つがNULLであるので、テーブルの上の制約を入れて、結果セットに単一のユーザー名を取得するには、あなたの検索でCOALESCEを使用して:あなたはあなたの他のと一緒に別のテーブルを保持することができます

SELECT COALESCE(User.UserName, Comment.UserName) AS UserName --, etc. 
FROM Comment 
LEFT JOIN User 
    ON User.UserID = Comment.UserID 
0

テーブルusernameuseridフィールドあなたはLと同じようuseridフィールドと他のフィールドが含まれてい

  • usersを含ま

    • guestsイケ。

    することはできその後、クロスリファレンス上記2つのユーザーID列を使用してcommentsユーザーID列、ユーザー名およびその他の情報を取得するために、あなたはcomments

  • 0

    username列の必要性を排除します。この方法コメント表の2つのフィールドに留まります。ユーザーテーブルに匿名ユーザーを作成し、常に両方のファイルを作成します。匿名ユーザーの場合
    :パフォーマンスを持っているでしょうUsersテーブル
    から
    のuserId = IdをUsernameフィールドに登録されたユーザに対して、そのユーザテーブル内の単一の匿名ユーザー
    のUserName =匿名ユーザー名

    は、複製されることになるの値コメントの隣にUserNameを表示する必要がありますが、ユーザーの詳細をすぐに必要としないため、ニュースコメントを表示する際に役立ちます。

    関連する問題