2

Webサイト用にMySQLデータベースをモデル化しています。

現在、「人」テーブルを作成し、必要なを決定しています。

には名前の列があり、さまざまな規則の名前を含むエイリアス
の列を追加したいと思います。

たとえば、「マイケルジャクソン」という名前の人は、「 M。ジャクソン」、 「ジャクソン、M」「MJ」などのエイリアスを持っている場合があります。

とにかく、各人は異なる数のエイリアスを持つことができます、そしてどのデータ型が合理的である可能性がありますか?

エイリアスフィールドをVarcharとして作成し、すべてのエイリアスをその中に入れて、PHPで分割しますか?

またはPHPの名前から動的にエイリアスを作成しますか?DBに入れる代わりに?

私は良い推薦を待っています、ありがとう!

4

3 に答える 3

4

これを行うための正規化された方法は、個人IDフィールドとエイリアスフィールドを持つ個別のエイリアステーブルを持ち、多対1の関係を作成することです。もう1つの方法は、あなたが言うように、VARCHARすべてのエイリアスを持つフィールドを作成し、それらをPHPで分割することです。エイリアスを検索する必要がない場合、これは機能するはずですが、正規化されたバージョンの方がはるかにクリーンです。

于 2012-04-08T01:16:07.890 に答える
2

新しいテーブルを作成し、それを呼び出しますaliases。このテーブルには、テーブルとの多対1の関係が必要peopleです。

テーブルの関係

テーブルaliasesには、親テーブルへの外部キーが必要です(つまり、参照personsする列があります)aliases.personIdpeople.personId

次に、データを取得するにはを使用しますJoins

参照:

カーディナリティ(データモデリング)

外部キー

結合(SQL)

そして最後にそして最も重要なのは正規化です

于 2012-04-08T01:28:46.870 に答える
1

エイリアスには別のテーブルを使用するのがおそらく最善ですが、1つのテーブルを使用する場合は別の方法があります

名前とエイリアスを#で区切り、1つの列に配置します

マイケルジャクソン#M。ジャクソン

PHPコードでは、explodeを使用して名前とエイリアスを取得できます

$fullname = "Micheal Jackson#M.Jackson";

$each = explode('#' , $fullname );
$each[0];//Micheal Jackson
$each[1];//M.Jackson
于 2012-04-08T01:33:01.360 に答える