ドライバーのリストとバスのリストがあるとします。これで、インターフェイスで、ドライバーのインスタンスとバスのインスタンスを作成できます。以下のように:
ただし、ご覧のように、バスはドライバーを持つことができ、ドライバーはバスを持つことができるので、相互に参照できます。
ジレンマは、最初に入力するフォームに応じて、それらが相互の前提条件になる可能性があることです。ドライバーのインスタンスとバスのインスタンスを相互に参照する必要なく作成できるように、このジレンマをどのように解決しますか?そして、それらを参照/リンクする必要がある場合、その「リンク」インターフェースはどのように見えますか?
ドライバーの下で「バスの割り当て」を行いますか?または、バスの下で「ドライバーを割り当てる」のですか?または、2つの方法の正誤はありませんか?
多対多の関係タイプでも同じ問題が発生します。映画CMSをお持ちの場合、映画の下に「俳優を追加」するか、俳優の下に「映画を追加」しますか?またはライブラリCMSの場合、ブックの下に「著者を追加」しますか、それとも著者の下に「ブックを追加」しますか?
バスとドライバは、お互いの割り当ての外に存在します。それらは両方とも、1つ以上のバスと1つ以上のドライバーを持つルートの属性のようです
ルートのような上位レベルの概念はありますか?
私はあなたのデータモデルが何であるかはわかりませんが、「ルート」またはいくつかのトップレベルのオブジェクトは、接続されているすべてのバスとドライバーのビューを提供することができます手数料のトップレベルのビューがあります。
いつでも、ドライバーのないバスのプールが存在する可能性があるため、バスが同じレベルに存在し、相互にクロスリンクできるようにします。これは、バスルートが複数のドライバーを共有する場合やその逆の場合に特に役立ちます。これらの関係を示すテーブルと詳細ビューを表示できるためです。
バスリストからバスの詳細ビューにドリルダウンできますが、ドライバーのリンクとドライバーを追加するメニューを許可すると、ドライバーのリストから選択するダイアログをポップアップできます。
ドライバーダイアログに期待していたドライバーがない場合は、新しいドライバーを追加できます。送信すると、バスリストに追加された新しいドライバーが表示されます。次に、新しく作成したドライバーのリンクをクリックして、そのドライバーの詳細ビューに移動し、関連するバスを表示します。
download bmml source – Balsamiq Mockups で作成されたワイヤーフレーム
Imhoは「トリップID」を追加して接続の中心点を設定します。したがって、将来の行き来の旅行は、適切な時間までドライバーやバスを参照しません。しかしコンテキストが重要ここにあります。どのドライバーまたはどのバスを強調する特別な理由がない限り、それは単純に愚かにしてください。新しい情報が必要なため、旅行/イベントのフォームに入力し、updateと入力します。
それはデータの柔軟性を可能にします:
各運転手は、旅行ごとに異なるバスを使用する場合があります(バスが故障したり、高速道路で事故を起こす可能性があります)
各バスには、旅行経路に沿って複数の運転手がいる場合があります。 quebec(driver a)totoronto(driver b)toニューヨーク
あなたの例を参照するには...
これは興味深い問題ですが、比較的簡単に解決できると思います。
このソリューションは、次のことを前提としています。
- 両方のフォームに区分化されたスタイルコード(フロントエンド)がある
- 両方のフォームに区分化された提出コード(バックエンド)がある
まず、次のモックアップを検討してください。
元のモックアップに対する2つの主な変更:
次のステップ:
このフォームが送信されると、バスとドライバーの両方の送信アクションが呼び出されます。
他の考え:
それらが厳密に必要で、どのインスタンスでも1つのドライバーのみが可能でない限り、フローは関連していませんが、並行して実行されます。そうしないと、将来的に多くの問題が発生します。あなたの映画のCMSシナリオは完璧な例です。映画には多くの俳優がいて、俳優は多くの映画に登場することがあります。
これを使用するもう1つの例は、データベースを操作するためです。..databases!データベースを作成し、ユーザーを作成します。次に、ユーザーをデータベースに割り当てます。 database
をbus
に、user
をdriver
に変更すれば、完了です。
したがって、フローは次のようになります。
drop-down
またはcheckbox
(ドライバーの数によって異なります)。ユーザーはこのバスにドライバーを割り当てることができます。次のようになります。
注:ドライバーを必要としないことをお勧めします。ユーザーはそれを空のままにして、後でこの情報を入力できます。
この種の問題は非常に一般的であり、すべてはユーザーを知ることになります メンタルモデル 。彼らは運転手付きのバスやバスの運転手について考えていますか?
それらに尋ねればあなたは正しい道を知っています:
パス1。
バスを作成または編集して、ドライバーを割り当てます。または、ドライバーがシステムにない場合、新しいドライバーの追加のフォームフィールドを表示>フォームを保存
パス2。
ドライバーを作成または編集して、ドライバーをバスに割り当てます。または、バスがシステムにない場合、新しいバスの追加フォームフィールドを表示>フォームを保存
ユーザーが選択するパスが異なる状況に依存する場合、両方のパスで提供できますが、それぞれをアプリケーションの異なる開始点から提供できます。ただし、両方のパスを同時に表示したり、開始点を表示したりすると、認知負荷が大幅に増えるため、推奨されません。