1

したがって、3 つのテーブルとそれに続く 3 つのモデルがあります。

Company (table: companies)
Person (table: people)
Address (table: addresses)

各個人または会社が複数のアドレスを持つことができることを考慮して、これらをどのように接続するか、しかしアドレスは同じ形式であるため、単一の「アドレス」テーブルを使用したいので、アドレスの取引/管理は単一のテーブルで行うことができますモデル?

この構造のため:

companies(id, name, ...)
people(id,name, ... )
addresses(id, foreign_id, foreign_model, ...)

私には少し場違いなようです。基本的にこれが現在の構造です。「foreign_model」フィールドは、住所が属するモデル (つまり、Company または Person) を指定する文字列です。

これはすべてCakephpの下にありますが、この構造には多くの問題があります。代わりに何を使用すればよいですか?

4

1 に答える 1

1

これはどうですか:

companies(id, name, address_id,..)
people   (id,name, address_id,... )
addresses(id,... )

企業も個人も、アドレス テーブルを参照してアドレスを取得します。ここでは、重複したアドレスがあれば保存する必要はありません

編集:会社と人の両方が多くのアドレスを持つことができる場合

次に、マッピングテーブルを保持します

companies(id, name,..)
people   (id,name, ... )
addresses(id,... )

Address_map(id,address_id,type)

タイプは、それが会社または人の
IDのどちらであるかを示します->会社IDまたは人質のいずれか

于 2012-09-11T08:44:01.170 に答える