MySQLでデータベースを設計していますが、データベースの構造とテーブル間の関係についてのガイダンスが必要です。私は次の事実を確認しました:
私は持っています:
- 多くのユーザー。(罰金)
- 1人のユーザーには多くの組織があります。(1つ-多く)
- 1つの組織には多くのイベントがあります。(1つ-多く)
- 1人のユーザーが多くのアドレスを持っています。(1つ-多く)
- 1つの組織には多くのアドレス(1つから多数)がありますが、これらのアドレスは別の組織またはイベントによって使用される可能性があります。したがって、多くの組織には多くのアドレスがあります。(多く-多く)
- 1つのイベントには1つのアドレスがあります。(1つ-1つ)
- 1つの組織には1つのメインアドレスがありますが、多くの組織が同じアドレスから作業している可能性があるため、(多-1つ)
組織やイベントにはアドレスがありますが、それらはアドレスを所有していませんが、ユーザーはアドレスを所有しているため、これは私が立ち往生しているところです。では、これらの関係は必要ですか?外部キーの関係を定義する必要がありますか、それともそれらなしで逃げることができますか?2つの組織が同じアドレスを使用できますが、一方のデフォルトアドレスではないため、デフォルトアドレスの個別のテーブルを維持する必要があります。そのため、アドレステーブルでそれを参照すると問題が発生します(どちらが実際にはメインアドレスです)。
それとも私はこれをあまりにも複雑な方法で見ていますか?おそらく、ユーザーにアドレスを維持させ、組織を追加すると、組織はそのアドレスを参照しますが、他のアドレスについては何も知りません(1つは組織の1つの関係ですか、それとも複数の関係はアドレスの1つですか?明らかに組織の削除ですか?アドレスの削除を意味するものではなく、その逆も同様です)。
次に、イベントが追加されると、アドレスも参照するだけで、所属する組織のデフォルトのアドレスを検索できます。上記と同じ質問が発生します。イベントはそのアドレスにありますが、アドレスはイベントに属していないか、またはその逆です。
それはほとんどそれを次のように単純化します:
- 1人のユーザー、多くのイベント。
- 1人のユーザー、多くの組織。
- 1人のユーザー、多くのアドレス。
- 1つの組織、1つの住所。
- 1つのイベント、1つのアドレス。
これは、この問題を調べる正しい方法ですか?私が考えていなかったと思われる問題が発生する可能性はありますか?これに取り組むためのより良い方法はありますか?私が抱えている最大の問題は、テーブルを相互に関連付けて、それに応じて関係を設定できるようにする方法です。
-編集:情報を追加
さらに考えてみると、複数の組織が同じイベントを開催している可能性があります。イベントもリンクできるようにしたいと思います。これらの組織は別々のユーザーによって追加される可能性がありますが、すべてが関連している必要があります。これはMySQLが簡単に処理できるものですか、それともグラフデータベースなどの他のタイプのデータベースロジックを検討する必要がありますか?