私の友人と私はウェブサイトを構築していて、大きな意見の相違があります。このサイトの中核は、「人」に関するコメントのデータベースです。基本的にはコメントを入力でき、コメントの対象者を入力できます。次に、視聴者は、コメントまたは人物名の一部に含まれる単語をデータベースで検索できます。完全にユーザー生成です。たとえば、ある人の名前のつづりを間違えたバージョンについてコメントを投稿したい人がいる場合、それは可能であり、それは問題ありません。そのため、複数の異なるエントリ (ミドル ネーム、ニックネーム、スペルミスなど) としてリストされている異なる人物のスペルが複数ある場合がありますが、これはすべて問題ありません。人々がランダムな人や架空の人についてコメントするかどうかは気にしません.
とにかく、問題はデータベースをどのように構築しているかです。現時点では、コメント ID を主キーとする 1 つのテーブルだけで、コメントの対象となる「人物」のフィールドがあります。
コメントID - コメント - 人物
1 - 「彼は変だ」 - ジョン・スミス
2 - 「臭い女の子」 - ジェニー
3 - 「ゲイ」 - ジョン・スミス
4 - 「20ドル貸して」 - Jennyyyyyyyyy
すべてが正常に機能しています。データベースを使用して、特定の「人物」に対するすべての「コメント」を一覧表示するページを作成できます。しかし、彼はデータベースが正規化されていないことに執着しています。私はノーマライゼーションについて読み、彼が間違っていることを知りました。コメント ID は一意であり、「コメント」と「人」を指示するため、テーブルは現在正規化されています。今、彼は「物」であるため、「人」は自分のテーブルを持つべきだと主張しています。「人」は実際にはより大きなコンテナですが(1人の「人」はそれらについて多くの「コメント」を持つことができます)、データベースは「人」が属性であると問題なく動作するようですコメントID。さまざまな SQL 選択に対してさまざまな PHP 呼び出しを使用して、魔法のように出力がより洗練されたように見えるようにし、ユーザーが検索して結果を表示できるようにしますが、実際には、セットアップは非常に簡単です。私は現在、ユーザーに親指と親指でコメントをランク付けさせており、同じテーブルの別のフィールドとして「スコア」を保持しています。
「人」には独自の「スコア」や独自の属性がないため、現在、一意の「人」エントリ用に別のテーブルを用意する必要はないと思います。コメントのみが行います。私の友人はとてもしつこいので、効率のために必要です。最後に私は、「別のテーブルを作成して、'person' を独自のフィールドにする場合、2 番目のフィールドは何にしますか? テーブルに 1 つの列しかない場合、それは無意味に思えるので、同意します。後で 'person' に独自のテーブルを与える必要が生じるかもしれませんが、それなら対処できます。」彼は次に、文字列を主キーにすることはできず、現在のテーブルの「人」を数値に変換すると、その数値が新しい「人」テーブルの主キーになると述べました。私にはこれは不必要に思え、現在のテーブルが読みにくくなります。彼はまた、2 番目のテーブルを後で作成することは不可能であり、後で必要になる可能性があることを予測する必要があると考えています。
誰が正しいですか?