0

私はいくつかのphp/mysql作業を行っており、何がより効率的で、どの方法がより良いデータ整合性を持っているのか疑問に思い始めました。

方法 2 を使用したことはありませんが、CMS や e コマースなどのシステムで使用されているのを見たことがあります。私は定期的に#1を使用しています。

例: システムで「タスク」を作成する場合、1 人または複数のユーザーを割り当てる必要があります。


方法 #1 この方法では、task_id と user_id の両方を格納するテーブルを作成します。このテーブルにクエリを実行して関係を取得します。


方法 #2 この方法では、タスク テーブル「users_assigned」に列があり、必要に応じてシリアル化を解除するシリアル化された配列が格納されます。例えば

$data = array('John', 'Jack', 'Jill');
// after serialization it would look like...
// a:3:{i:0;s:4:"John";i:1;s:4:"Jack";i:2;s:4:"Jill";}

この種のデータをデータベースに格納するには、どの方法が最適ですか?

4

2 に答える 2

1

非正規化(シリアル化された配列に複製されたデータを格納する、通常の形式のルールに違反する)に強い理由がない場合は、別のテーブルに固執します。フェッチはもう少し複雑で、結合が必要ですが、データベース(外部キー)でリレーションの整合性をより適切に制御でき、データがより適切に編成され、より明確に定義されます。

非正規化の極端なケースについては、この記事http://backchannel.org/blog/friendfeed-schemaless-mysqlを参照してください。ただし、彼らの場合、追加のリンクトデータを行セットにフェッチしません(この場合、シリアル化された配列のユーザーに関する詳細情報を結合する必要があります)。

于 2012-10-15T21:36:00.943 に答える
0

方法 2 は悪い考えです。テーブルを結合することはほとんどできません (まだ可能ですが、実際に使用するのではなく、実行できることを証明するために行う種類のコードのみです)。

于 2012-10-15T21:32:26.260 に答える