問題タブ [data-modeling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database-design - DB 設計に関する質問
私は組織図を設計しています。モデルはほぼ準備ができており、ここではわかりやすくするために少し簡略化されています。
だから私はすべての OrgUnit の ManagerEmployee (1 つあるはずです) を知りたいです。Employees は複数の仕事を持つことができますが、そのうちの 1 つが主な仕事でなければならないので、彼のマネージャーやその他のものを知っています。これは scnese の背後にある小さなワークフローをサポートするため、非常に単純な組織図モデルではありません。
では、(IsManager プロパティを OrgUnitJobs モデルに) プロパティを追加するか、OrgUnitModel に ManagerOrgUnitJobId を追加しますか? なぜ?
同様に、従業員の場合、IsPrimaryJob プロパティを OrgUnitJobEmployee モデルに追加するか、PrimaryJobId を Employee モデルに追加します。
database - 効率と使いやすさのために、データベースでこの[ネットワーク、投稿の詳細]をモデル化する方法は?
LinkedInでは、誰かのプロフィールにアクセスすると、その人とどのようにつながっているかを確認できます。LinkedInは、3レベルまでの接続を示していると思います。
shabda-> Fooユーザー、barユーザー、bazユーザー->Joelの接続->Joel
これをデータベースでどのように表現できますか。
としてモデル化すると、
次に、3レベルの深さのネットワークを見つけるために、すべての接続、それらの接続、およびそれらの接続を取得し、現在のユーザーがそこにいるかどうかを確認する必要があります。これは明らかに、どのサイズのDBでも非常に非効率的であり、おそらく同様に機能するのは不格好です。
リンクインでこのネットワークを見ることができるので、私がアクセスするどのプロファイルでも、これも事前に計算されているとは思いません。
私の頭に浮かぶもう1つのことは、おそらくこれはリレーショナルDBに格納しないのが最善であるということですが、それを格納および取得するための最良の方法は何でしょうか。
entity-framework - 特定のアプリケーション向けのエンティティのモデリング - Entity Framework
私は2つのアプリケーションを持っています:
- Manager UI - すべてのフィールド (ユーザー名、電子メール、年齢など) を含むユーザーを作成し、それらを表示できる必要があります。
- コア コンポーネント - UserId および Username フィールドのみを必要とし、非常にパフォーマンスが高い必要があります。また、データベースに書き込むこともできません。
UIアプリケーション用とコアコンポーネント用の2つの異なるモデルが必要なようです。最初のモデルを作成すると、人生はうまくいきます。しかし、2 番目のモデルを作成しようとすると、不要なフィールドがすべて取得されます。それらを削除しようとすると、null可能なフィールドに対してのみそれを実行できますが、必要なフィールド(実際には保存にのみ必要です)に対しては実行できません。私が得たものは次のとおりです。
「メール」フィールドをプライベートゲッターおよびセッターとして設定しても、エンティティに値をまったく保存したくない(そしてデータベースからフィールドを取得したくない)ため、私の問題は解決しません-私が言ったように、このアプリケーションは可能な限りパフォーマンスを発揮します。
どういうわけかモデルを読み取り専用に設定できれば、これは解決すると思いますが、それはただの予感です (それを行う方法が見つかりませんでした - ありますか?)
どんな助けでも大歓迎です。ありがとう、ニル。
database-design - アプリケーションのカスタムフィールドをサポートするためのデザインパターンは何ですか?
商用アプリケーションを開発します。お客様はカスタムフィールドのサポートを求めています。たとえば、顧客フォームにフィールドを追加したいとします。
フィールド値とフィールドに関するメタデータを格納するための既知のデザインパターンは何ですか?
今のところ、次のオプションが表示されます。
オプション1:varchar型のField1、Field2、Field3、Field4列をCustomerテーブルに追加します。
オプション2:顧客テーブルにXMLタイプの単一の列を追加し、カスタムフィールドの値をxmlに格納します。
オプション3:varchar型の列を持つCustomerCustomFieldValueテーブルを追加し、その列に値を格納します。そのテーブルには、CustomerID、CustomFieldIDも含まれます。
CustomFieldIDは、CustomFieldID、FieldName、FieldValueTypeIDの列を持つCustomFieldという別のテーブルのIDになります。
オプション4:可能な各値タイプの列を持つCustomerCustomFieldValueテーブルを追加し、右側の列に値を格納します。#3と似ていますが、フィールド値は強い型の列を使用して格納されます。
オプション5:オプション3および4は、単一の概念(顧客)に固有のテーブルを使用します。私たちのクライアントは、他の形式のカスタムフィールドも求めています。代わりに、システム全体のカスタムフィールドストレージシステムを用意する必要がありますか?したがって、CustomerCustomFieldValue、EmployeeCustomFieldValue、InvoiceCustomFieldValueなどの複数のテーブルを使用する代わりに、CustomFieldValueという名前の単一のテーブルを使用しますか?私にはもっとエレガントに見えますが、それがパフォーマンスのボトルネックになるのではないでしょうか。
これらのアプローチのいずれかを使用しましたか?成功しましたか?どのアプローチを選択しますか?私が考慮すべき他のアプローチを知っていますか?
また、私のクライアントは、カスタムフィールドが他のテーブルのデータを参照できるようにしたいと考えています。たとえば、クライアントは「お気に入りの支払い方法」フィールドを顧客に追加したい場合があります。支払い方法は、システムの他の場所で定義されています。それは写真の「外部キー」の主題をもたらします。カスタムフィールドテーブルに格納されている値が有効な値であることを確認するために、制約を作成する必要がありますか?
ありがとう
======================
2009年7月27日編集:
ご回答ありがとうございます。アプローチのリストは今ではかなり包括的であるように思われます。オプション2(単一のXML列)を選択しました。今のところ、実装するのが最も簡単でした。要件がより複雑になり、サポートするカスタムフィールドの数が増えるため、より厳密に定義されたアプローチに抵抗する必要があります。
database-design - e ショップの実装: 注文のステータス?
こんにちは、私の仲間のプログラマーの皆さん、
私はゼロからオンライン ショップを設計およびプログラミングしています。フロントエンド経由で受け取った「注文」を管理するモジュールがあります。
特定の瞬間に注文で何が起こっているかを知るために、ステータスが必要です。ステータスは次のとおりです。
- 支払い待ち
- 確認済み - 発送待ち
- 発送済み
- キャンセル
私の質問は単純なものですが、ストアのデザインを決定することが非常に重要であり、次のとおりです。このステータスを保存するにはどうしますか: Orders テーブルに列を作成しますか、それとも単にステータスを「計算」しますか?支払いが受領されたか、注文ごとに出荷されたかに応じて、各注文の (is_cancelled列を除いて)
この種の問題をモデル化するための最良のアプローチは何でしょうか?
PD: 将来的には、これらのステータスを構成可能にして、同じソフトウェアを使用している他のクライアントを購入できるようにしたいとさえ思っています..
java - Java で任意の BLOB を表すために使用する型はどれですか?
さまざまな方法とさまざまな形式でデータを受け取るアプリケーションがあります。私は何らかの方法でデータを取得するプラグイン可能なレシーバーを持っています (例えば、メールボックスをポーリングする、HTTP 要求をリッスンする、ディレクトリのコンテンツを監視するなど)、それを MIME タイプに関連付けてから、次のようにラップして渡します。
さらに下に進むと、データはmime
フィールドの値に応じて特殊なハンドラーによって処理されます。ZIP ファイル、Excel ドキュメント、SOAP、汎用 XML、プレーン テキストなどを期待しています。この時点で、コードはデータの内容にとらわれないようにする必要があります。data
フィールドの適切なタイプは何ですか? Object
? InputStream
? Byte[]
?
sql - 顧客ごとに選択的に上書きされるマスタデータのデータベース構造
この質問では、メーカーとモデルのモデリングを備えたマルチテナントデータベースを使用するアプリケーションについて考えてみます。車の話をすると、メーカーはフォード、シボレー、BMWなどで、モデルはF-150、カマロ、M3になります。
モデルとメーカーの関係は多対1です。各テナントのデータは、customer_idを使用して分離されます。
データモデルの要件:
- メーカーとモデルをマスターレベルで定義して、すべての顧客が利用できるようにすることができます
- お客様は、使用するマスターエンティティを選択します
- 顧客はマスターモデルまたはメーカーの属性を上書きできます
- 顧客は独自のメーカーを作成できます
- お客様は、自社またはマスターメーカー向けに独自のモデルを作成できます
- モデル内の他のエンティティはこれらのエンティティに関連しているため、外部キーを作成できるメインテーブルがそれぞれに1つあることが望ましいです。この例では、メーカーとモデルのテーブルがその役割を果たします。
この例では:
- 顧客1は、フォードを現状のまま使用し、シボレーをオーバーライドし、2つのカスタムメーカーを追加します
- 顧客1はシボレーとBMWをそのまま使用し、1つのカスタムメーカーを追加します
- スクリプトのコメントに従ってモデルが作成されます
以下は、すべての要件を満たす注釈付きのサンプル実装です。
- これをどのように改善できますか?
- これらの関係を他にどのようにモデル化できますか?
メーカーテーブル
モデルテーブル
これらのテーブルの使用を簡素化するビュー
customer_id1のメーカー
SELECT manufacturer_id, name FROM vw_manufacturers WHERE customer_id = 1;
customer_id2のメーカー
SELECT manufacturer_id, name FROM vw_manufacturers WHERE customer_id = 2;
customer_id1のモデル
SELECT * FROM vw_models WHERE customer_id = 1;
customer_id2のモデル
SELECT * FROM vw_models WHERE customer_id = 2;
database - DB2用のデータモデルツール
DB2にデータベースを作成し、関係のあるテーブルを作成しました。DB2のデータベース設計に基づいてER図を作成したいと思います。MS SQLには、DBスキーマからERダイアグラムを作成する機能がありますが、少なくとも私の知る限り、DB2にはERダイアグラムがないようです。
このためのDB2自体のオープンソースツール/機能を知っている人はいますか?
sql - データ モデリング - 依存する 2 つの "ステータス" 列を処理する方法は?
私はここに来て、皆さんからの一種の「ベストプラクティス」タイプのアドバイスを求めたいと思うほど、私を悩ませている何かに出くわしました (et gals)
モデルにテーブルがあります。それを と呼びましょうprospect
。2 つの別個の外部システムが、このテーブルの行の更新を提供できますが、それぞれのシステムでのそのレコードの「ステータス」としてのみ提供されます。
これらのステータスをローカルに保存する必要があります。もちろん、最初のアイデアは、2 つの null 許容外部キーを作成することだけでした。このようなもの。
この例では、もちろん、ステータスの ID/値のペアを保持する 2 つのテーブルがあります。
ここにキャッチがあります-ext_status_2_id
そうでない限り、常にNULLになりますext_status_1_id
(1
これがビジネスルールの仕組みです)。
これを正しくモデル化しましたか? ext_status_2_id
脳の奥にこのしつこい声があり、「見込みのあるすべての行が必要になるわけではないので、これは正しくない可能性があります」と言っています。
問題があれば、これは MySQL 5.0.45 で、私は InnoDB を使用しています。