3

1 つの簡単な質問と id に対する答えが見つかりませんでした:

名前は 2 つの異なる DB 列 (名前/姓) または 1 つの列 (名前 + 姓) にある必要がありますか?

私が持っていたすべてのプロジェクトで、それらは2つの異なる列にありましたが、今は新しいプロジェクトを開始する必要があり、それをより適切に保存する方法を望んでいました. つまり、2 つの異なる列によって少し問題が発生し、パフォーマンスが低下することもありました。この非常に重要な点に注意してください:

  • サイトの公開部分の非常に重要な部分は高度な検索で、約 20 万件のレコードでフルネームを検索します。

それで、あなたは何を提案しますか?2 列または 1 ? 2を使用する利点が見つからないため、1列のソリューションに2番目に傾いていますが、間違っているのでしょうか?

編集

回答ありがとうございます。この質問の唯一の理由は、パフォーマンスの問題でした。得られるすべての追加ブーストが必要です。

4

5 に答える 5

5

リレーショナルデータベースのポイントは、データを関連付けることです。フルネーム(John Smithなど)を1つのフィールドに保存すると、名前と名前を簡単に区別できなくなります。

それらを別々のフィールドに保存すると、それらを単一のフルネームに非常に簡単に再結合できますが、名前を別々のファーストネームとラストネームのコンポーネントに確実に分離することは非常に困難です。

于 2012-10-01T14:48:15.240 に答える
3

2列の方がはるかに柔軟性があります。例えば。

  • 名前で並べ替えたいと思ったことはありますか?
  • その人に正式に話しかけたいと思ったことはありますか(例:コスミンさん)?
  • フォアネームではなくサネームで検索したい、またはその逆をしたいですか?

200Kレコードは、適切に設計されたデータベースでは取るに足らない量です。

あなたはこれが名前の主題に関する興味深い読み物であると思うかもしれません

于 2012-10-01T14:48:11.890 に答える
0

2つの列を使用すると、selectステートメントで高価な部分文字列操作を実行しなくても、名前で並べ替えることができます。CONCATを実行してフルネームを取得するのは簡単ですが、「JohnDoe-Smith」や「JohnDoeIII」などの名前からラストネームを解析するのは困難です。

于 2012-10-01T14:49:12.107 に答える
0

私の意見では、レコードをさまざまな方法で処理できるため、 2つの異なる列として設計したいと思います。パフォーマンスの問題については、検索を高速化するために2つの列にインデックスを追加してください。

検索しJohn Doeて、それが逆でDoe Johnあるにもかかわらず、に一致することを望んでいる場合がありJohn Doeます。これは、名前に個別のフィールドがあることの利点の1つです。

スキーマのサンプルデザイン、

CREATE TABLE PersonList
(
    ID INT AUTO_INCREMENT,
    FirstName VARCHAR(25),
    LastName VARCHAR(25),
    -- other fields here,
    CONSTRAINT tb_pk PRIMARY (ID),
    CONSTRAINT tb_uq UNIQUE (FirstName, LastName)
)
于 2012-10-01T14:49:24.927 に答える
0

2 つの列を使用すると、次のことができます。

  • 姓によるデータの簡単なソート
  • 名前によるユーザーとのコミュニケーション (例: 多くの Web サイトで使用される「Hello Michael」など)
  • 複数の列に大量のデータを表示する (画面にスペースがない場合は、姓のみを表示できます)

「名字」の形式で保存された名前は、並べ替えが簡単ですが、一部の国では洗練されていないと見なされる場合があります。

于 2012-10-01T14:52:44.767 に答える