1

私は現在MySQLデータベースを設計していますが、次の問題に直面しています。適切に解決/設計する方法がわかりません。

私はエンティティを持っています:(簡略化)

Providers, Addresses, Letters, Faxes

今:

Adresses belong to providers, Providers have many Addresses

Letters belong to Addresses, Addresses have many Letters

Faxes belong to Letters, Letter have many Faxes

だから今、私はこのデータベースモデルを使ってORMを使ってPHPで作業していて、Fax-Objectのインスタンスとそれに応じたプロバイダーをロードするものがある状況にいることに気づきました。

今、これは私に大きな参加またはいくつかのクエリの費用がかかります。

私が行く必要があるパスは次のとおりです。

Fax -> Letter -> Address -> Provider

今、私はファックスとプロバイダーの間に直接の関係を確立するべきかどうかを考えています。それはこの問題を解決するでしょう。しかし、これは冗長ではなく、二重の労力を犠牲にしてもたらされるのではないでしょうか。ファックスとプロバイダーの関係が変わった場合はどうなりますか?次に、両方の関係パスを調整します。

これを行うための好ましい方法は何ですか?私の例は少し単純化されています。実際、私が行かなければならない道はもう少し長いです。

4

2 に答える 2

5

関係と「より自然な」キーを特定することで、JOIN の必要性を下げることができます。

例えば:

ここに画像の説明を入力

があるのでFaxes.ProviderId直接 JOINFaxesProviders.

また、InnoDB テーブルはクラスター化されているため、逆の方向 (たとえば、「特定のプロバイダーのすべてのファックスを取得する」) に進む場合でも、優れたパフォーマンスが期待できます。

欠点は、「太い」キーと、ORM に対する相対的な不親切さです。ですから、これは妥協の問題だと思います。どちらのオプションが優れているかを判断するのはあなたです。

于 2012-06-14T09:44:35.630 に答える