2012-03-13 12 views
1

現在、私はデータベースの構造を扱っており、私はアドバイスを受けたいと思います。Mysql。 1つのテーブルすべてのエンティティのすべてのプロパティまたは各エンティティごとに1つのテーブル

私は2つのオブジェクトを持っています:バナーと広告。

私はバナーテーブルと広告テーブルを作成することができます。これは、各エンティティに関するすべての情報を保持します。主な利点として、1つのエンティティに関連するすべてがこのエンティティテーブルにあることがわかります。

一方、私はいくつかのテーブルのように: entity_properties。 これは、value_idのentity_idプロパティ値を保持します。主な利点は、いくつかの基本フィールドだけが必要なエンティティの場合、このテーブルに他のフィールドを入れることができることです。

しかし、私はどちらがより良い習慣とパフォーマンスであるかよく分かりません。 ありがとうございます。

答えて

1

正規化のためには、1つのエンティティにつき1つのテーブルを持つ方が良いです。正規化は、リレーショナルデータベースの冗長性と依存性を最小化する目的またはアプローチです。あなたの場合、バナーと広告は異なるエンティティです。今のところ、あなたは同じテーブルでそれらを使うことができるようです。したがって、「冗長性」はそうではありません。ただし、後でフィールドを追加したい場合はどうすればよいでしょうか?

さらに、コードの複雑さと可読性は別の問題です。たとえば、同じテーブルに異なるタイプのオブジェクトを追加する場合は、コード内でそれらを区別するために内部ロジックを追加する必要があります。これは、複雑でおそらく読みにくいコードがあることを意味します。

0

システムとストアする属性/値の正確な使用状況によって異なります。

重要な情報と必要な情報をad_id、entity_name、entity_valueなどの 'ad_entities'表の1つの表と 'ad'表に保存するとよいでしょう。あなたのアプリケーションに似たようなものです。

これは、現在の広告またはすべての広告に関するすべての情報を、オブジェクトが簡単に把握できる1つの非常に単純なクエリを使用して取得できるため、優れたパフォーマンスの選択肢です。

+0

はい、私は少しテストしました。 1エンティティ= 1のテーブルを使用する方が良いと思います。 –

+0

私はあなたのテスト結果に非常に興味があります。これらのエンティティがすべて必要な場合は、メインの広告テーブルこれらのエンティティが必須/必須でない場合は、個々のテーブルにそれらを持たない方がよいでしょう。 –

+0

私の目的は、データベースを単純なものにすることでした。基本的なエンティティテーブルしか持たず、いくつかの主要なプロパティを格納していると思った。他のすべてのエンティティのプロパティはすべて 'values'テーブルに格納されます。 entity_id、プロパティ、および値のみが保存される場所。 entity_type_idもそこに格納されるかもしれません。しかし、PHPコードは少し複雑になるので、私は1エンティティ= 1テーブルルールに固執することに決めました。 –

関連する問題