メインメニューはバックグラウンド管理システムの一種で、特定のメニューまたは特定のメニュー内の特定の機能を表示するかどうかを設定によって制御できます。
その設計と実装に関して、私の個人的な要約は次のとおりです。
(1)
データベース テーブルで保存
一般に、メイン メニューはツリー構造であり、従来のリレーショナル データベースに基づく 2 つのソリューションがあります。
(1-1)
テーブル ソリューションを使用すると、テーブルには親子関係を関連付ける ID と親 ID が含まれます。
(1-2)
2 つのテーブル ソリューションでは、1 つのテーブルはメニューの親子関係を記録するために使用され、もう 1 つのテーブルはメニュー情報のみを記録します。
データ転送スキームも 2 つあります:
(1-1-1)
バックエンドはデータをクエリしてバックグラウンド コード ループを通じて構築するか、SQL トランザクションを使用してツリー構造を構築してフロントエンドに渡します
(1-1-2)
バックエンドはデータをクエリしてフロントエンドに渡し、フロントエンドが独自のツリー構造を構築できるようにします
(2)
json で保存
これは、この問題について主に知りたい方法です。以前に使用したことがあるかどうかはわかりません。次に、親と子を直接ビルドします。メインメニューのノード情報をjson形式に変換し、構成テーブルまたはjsonファイルに保存します。これにより、ツリー構造を構築する手間が省けます。ただし、純粋な json 形式であるため、データ構造が複雑でなければ手動でメンテナンスできますが、複雑な状況に遭遇した場合は、それをメンテナンスするためのメンテナンス インターフェイスを作成する必要がある場合があります。現時点では、json には実装されていないため、フロントエンドである SQL に似たクエリ構文 (js であると仮定します) 追加、削除、変更の確認 (特に削除) を記述するのは特に複雑になります。
同時に、
(2) json を使用して保存する についてもご意見があれば、それについてもお話しいただければと思います。
パフォーマンス、拡張性、保守性などを総合的に考慮します。
方案要根据技术来选,就你给出的两种方案来说,第一种更适合关系型数据库实现,第二种更适合 NoSQL 数据库实现。
综合来看更推荐第一种方案,将菜单结构 flatten 在后期设计用户、用户组、权限等模块的时候会比较方便。而使用 JSON 的方案进行这些操作就会比较复杂。