web-dev-qa-db-ja.com

相互の前提条件である2つのフォーム間のリンクを作成する方法は?

ドライバーのリストとバスのリストがあるとします。これで、インターフェイスで、ドライバーのインスタンスとバスのインスタンスを作成できます。以下のように:

enter image description here

ただし、ご覧のように、バスはドライバーを持つことができ、ドライバーはバスを持つことができるので、相互に参照できます。

ジレンマは、最初に入力するフォームに応じて、それらが相互の前提条件になる可能性があることです。ドライバーのインスタンスとバスのインスタンスを相互に参照する必要なく作成できるように、このジレンマをどのように解決しますか?そして、それらを参照/リンクする必要がある場合、その「リンク」インターフェースはどのように見えますか?

ドライバーの下で「バスの割り当て」を行いますか?または、バスの下で「ドライバーを割り当てる」のですか?または、2つの方法の正誤はありませんか?

多対多の関係タイプでも同じ問題が発生します。映画CMSをお持ちの場合、映画の下に「俳優を追加」するか、俳優の下に「映画を追加」しますか?またはライブラリCMSの場合、ブックの下に「著者を追加」しますか、それとも著者の下に「ブックを追加」しますか?

4
catandmouse

リストビューと詳細ビューを使用してクイックリンクを有効にし、ユーザーがダイアログから関連エンティティをアタッチできるようにすることができます。

バスとドライバは、お互いの割り当ての外に存在します。それらは両方とも、1つ以上のバスと1つ以上のドライバーを持つルートの属性のようです

ルートのような上位レベルの概念はありますか?

私はあなたのデータモデルが何であるかはわかりませんが、「ルート」またはいくつかのトップレベルのオブジェクトは、接続されているすべてのバスとドライバーのビューを提供することができます手数料のトップレベルのビューがあります。

いつでも、ドライバーのないバスのプールが存在する可能性があるため、バスが同じレベルに存在し、相互にクロスリンクできるようにします。これは、バスルートが複数のドライバーを共有する場合やその逆の場合に特に役立ちます。これらの関係を示すテーブルと詳細ビューを表示できるためです。

バスリストからバスの詳細ビューにドリルダウンできますが、ドライバーのリンクとドライバーを追加するメニューを許可すると、ドライバーのリストから選択するダイアログをポップアップできます。

ドライバーダイアログに期待していたドライバーがない場合は、新しいドライバーを追加できます。送信すると、バスリストに追加された新しいドライバーが表示されます。次に、新しく作成したドライバーのリンクをクリックして、そのドライバーの詳細ビューに移動し、関連するバスを表示します。

mockup

download bmml sourceBalsamiq Mockups で作成されたワイヤーフレーム

7
Mike M

Imhoは「トリップID」を追加して接続の中心点を設定します。したがって、将来の行き来の旅行は、適切な時間までドライバーやバスを参照しません。しかしコンテキストが重要ここにあります。どのドライバーまたはどのバスを強調する特別な理由がない限り、それは単純に愚かにしてください。新しい情報が必要なため、旅行/イベントのフォームに入力し、updateと入力します。

それはデータの柔軟性を可能にします:

  • 各運転手は、旅行ごとに異なるバスを使用する場合があります(バスが故障したり、高速道路で事故を起こす可能性があります)

  • 各バスには、旅行経路に沿って複数の運転手がいる場合があります。 quebec(driver a)totoronto(driver b)toニューヨーク

あなたの例を参照するには...

  • 映画、その後キャスト(俳優)、ビデオ、写真、有名な引用
  • 予約してからAuthor/s
8
nolochemical

これは興味深い問題ですが、比較的簡単に解決できると思います。

このソリューションは、次のことを前提としています。

  • 両方のフォームに区分化されたスタイルコード(フロントエンド)がある
  • 両方のフォームに区分化された提出コード(バックエンド)がある

まず、次のモックアップを検討してください。

Step 1

元のモックアップに対する2つの主な変更:

  • テキストフィールドをドロップダウンに置き換えます。ドロップダウンは、システムに読み込まれたドライバーに基づいて入力されます。ユーザーがドライバー名のスペルを間違えるとどうなりますか?
  • 新しいドライバーを作成するオプションを追加する

次のステップ:

Step 2

  • ユーザーが同じ手順で新しいドライバーデータを入力できるようにします
  • バス番号を無効にします。ボックス、新しいバスと同じである必要があります(またはこのフィールドを完全に非表示にします)
  • ボタンのテキストをリセットして2つのアクションを一致させる

このフォームが送信されると、バスとドライバーの両方の送信アクションが呼び出されます。


他の考え:

  • バス/ドライブリンクを指定する必要がない場合は、ユーザーが後で指定できるようにしても問題ありません。ただし、その作業を忘れた場合は注意してください。
  • これらを1つの「作成」フォームに組み合わせてみませんか?
4
Alan

それらが厳密に必要で、どのインスタンスでも1つのドライバーのみが可能でない限り、フローは関連していませんが、並行して実行されます。そうしないと、将来的に多くの問題が発生します。あなたの映画のCMSシナリオは完璧な例です。映画には多くの俳優がいて、俳優は多くの映画に登場することがあります。

これを使用するもう1つの例は、データベースを操作するためです。..databases!データベースを作成し、ユーザーを作成します。次に、ユーザーをデータベースに割り当てます。 databasebusに、userdriverに変更すれば、完了です。

したがって、フローは次のようになります。

  • まず、ユーザーがドライバー(またはバス)を作成します。同じですが、ドライバーが追加、変更、または削除される可能性が高くなります。また、次のステップでは、初めてバスを追加するときに便利です)。
  • 次に、バスを作成します。このステップでは、drop-downまたはcheckbox(ドライバーの数によって異なります)。ユーザーはこのバスにドライバーを割り当てることができます。
  • 以上です!

次のようになります。

enter image description here

注:ドライバーを必要としないことをお勧めします。ユーザーはそれを空のままにして、後でこの情報を入力できます。

1
Devin

ユーザーの考え方や働き方を理解する

この種の問題は非常に一般的であり、すべてはユーザーを知ることになります メンタルモデル 。彼らは運転手付きのバスやバスの運転手について考えていますか?

それらに尋ねればあなたは正しい道を知っています:

パス1。
バスを作成または編集して、ドライバーを割り当てます。または、ドライバーがシステムにない場合、新しいドライバーの追加のフォームフィールドを表示>フォームを保存

パス2。
ドライバーを作成または編集して、ドライバーをバスに割り当てます。または、バスがシステムにない場合、新しいバスの追加フォームフィールドを表示>フォームを保存

ユーザーが選択するパスが異なる状況に依存する場合、両方のパスで提供できますが、それぞれをアプリケーションの異なる開始点から提供できます。ただし、両方のパスを同時に表示したり、開始点を表示したりすると、認知負荷が大幅に増えるため、推奨されません。

0
jazZRo