タグ付けされた質問 「rules-and-constraints」

7
データベースの制約はどうなりましたか?
RDBMSのデータベースモデルを確認すると、通常、PK / FK以外の制約がほとんどまたはまったくないことに驚かされます。たとえば、パーセンテージは多くの場合型の列に格納されますがint(tinyintより適切です)CHECK、値を0..100の範囲に制限する制約はありません。同様にSE.SEでも、チェック制約を示唆する回答は、データベースが制約の間違った場所であることを示唆するコメントをしばしば受け取ります。 制約を実装しないという決定について尋ねると、チームメンバーは次のように応答します。 そのような機能がお気に入りのデータベースに存在することすら知らないということです。ORMのみを使用するプログラマからは理解できますが、特定のRDBMSで5年以上の経験があると主張するDBAからはほとんど理解できません。 または、アプリケーションレベルでそのような制約を強制し、データベースでそれらのルールを複製することは、SSOTに違反して、良いアイデアではありません。 最近では、外部キーさえ使用されないプロジェクトが増えています。同様に、ユーザーが参照整合性をあまり気にせず、アプリケーションにそれを処理させることを示す、SE.SEに関するいくつかのコメントを見ました。 FKを使用しない選択についてチームに尋ねると、次のように伝えます。 たとえば、他のテーブルで参照されている要素を削除する必要がある場合は、PITAです。 NoSQLは揺れ動き、外部キーはありません。したがって、RDBMSではそれらは必要ありません。 パフォーマンスの点では大したことではありません(コンテキストは通常​​、小さなデータセットで動作する小さなイントラネットWebアプリケーションですので、実際にはインデックスでも大したことはありません。特定のクエリのパフォーマンスが1.5 。〜20ミリ秒) アプリケーション自体を見ると、次の2つのパターンに体系的に気付きます。 アプリケーションは、データベースに送信する前にデータを適切にサニタイズしてチェックします。たとえば102、アプリケーションを介して値をパーセンテージとして保存する方法はありません。 アプリケーションは、データベースからのすべてのデータが完全に有効であると想定しています。つまり102、パーセンテージで表示された場合、どこかでクラッシュするか、単にユーザーにそのまま表示され、奇妙な状況になります。 クエリの99%以上が1つのアプリケーションによって実行されますが、時間が経つにつれて、スクリプトが表示され始めます。必要に応じてスクリプトを手動で実行するか、cronジョブを実行します。一部のデータ操作も、データベース自体で手動で実行されます。スクリプトと手動SQLクエリの両方に、無効な値が導入されるリスクが高くなります。 そしてここに私の質問が来ます: チェック制約なしで、最終的には外部キーなしでもリレーショナルデータベースをモデル化する理由は何ですか? 価値のあることについては、この質問と私が受け取った回答(特にThomas Kilianとの興味深い議論)により、データベースの制約についての結論を書いた記事を書くことになりました。

3
カレンダー/計画アルゴリズム
問題に直面しているので、どのようにアプローチしたらよいかわかりません。従業員のカレンダーを作成する必要があります。各従業員には特定の仕事上の制約があります(個人的なもの、一般的なもの) 私が取り組んでいるもの: 医者がいます 各医師は週5日勤務する必要があります。 各医師は週に1晩働く必要があります 各医師は、他の医師と比較して(または可能な限り近く)夜同じ時間働く必要があります。 各医師は、他の医師と同等の(または可能な限り近い)木曜日の夜と日曜日の夜に同量の仕事をしなければなりません。 一部の医師は特定の日/夜に作業できない(ユーザーによる入力) 一部の医師は、特定の日/夜に作業したい(ユーザーによる入力) 一部の医師は、特定の日/夜に仕事をしたくない(ユーザーによる入力) 問題のユーザーはカレンダーを扱っている人です。すべての制約に従うカレンダーを自動的に生成するソリューションを構築しようとしています。解決策は、各医師に「医師を追加」と「制約を追加」を入力し、次に「カレンダーを生成」ボタンを入力するだけの大きな設定です。それはユーザーにとって本当に基本的なものです。 私の問題 : 実際の計画をどのように生成するかわからない。ニューラルネットワークや遺伝的アルゴリズムなどについて読んでいるが、それらはすべて正しい解決策のように思えるが、実際にはそうではない。 GAを見ると、与えられた母集団(私の問題)の解を見つけるように作られていますが、開始母集団は与えられた制約のセットに既に従わなければなりません。その場合、私の最初の人口はすでに解決策です。「最適化」する必要はありません。1人の人が月曜日の3晩連続して働くことは問題ではありません。実際に正しい場合、他の人が同じ量で働く場合は、他の人もある時点で月曜日の3日間働くことは問題ありません。私の問題はすでにGAの開始点で解決されているので、GAは私にとって「高度」であると思うようになります。 しかし、再び、GAは本当にこれのために作られたように見えるので、私はそれを正しく理解していないかもしれませんか? とにかく、GA(またはニューラルネットワークなど)を使用したことはないので、そのような学習曲線を作成する前に、正しいアプローチを選択してください。 私の質問 : 私のような問題に対する良いアプローチ/アルゴリズム/テクニックは何だと思いますか?ガス?ニューラルネットワーク?まったく違う何か? 私はすべての耳であり、必要に応じて詳細を開いていますが、私は自分自身をかなり明確にしたと思います:)

6
科学的コードは、一般的なコーディング標準を無視するのに十分な領域ですか?
最近、次の事実について心を包もうとしています。 一方では、「健康」、「クリーン」、「よく書かれた」などのコードと見なされるものについて、コーディングのガイドラインと標準が多数あります。ここでも広く議論されているように見える「クリーンコード」を参照してください。ルールの例:7行の長いメソッドと1または2レベルのインデント。従わないコードは、どういうわけか保守性が悪いために死ぬことが予想されます。 一方で、OpenCV、OpenCascade、VTKなどと連携するようになりました。これは科学的なコードです。彼らは2ページの長いメソッドを持っています(私自身)、OpenCascadeには10個のファイルに分割されたメソッドまたはクラスがあります(ここではジョークはありません)、VTKも混乱することがあります。しかし、これらのプロジェクトは繁栄し、維持され、広く使用されています! キャッチはどこですか?科学的で数学が重いコードを、それが機能するように書くことは許されていますか?あなたは、もしあれば、そのようなプロジェクトのための独立した標準のセットですか? 素朴な質問かもしれませんが、私は物事を行う方法としない方法を設定しようとするプログラミングの無効のようです。これは高校で働くことを教えられた方法です。私は卒業して以来、私がやらなければならないこと、主にプログラミングについてのガイドラインのサポートがほとんどありませんでした。

4
概念的には、ゲームのルール/制約(グラフィックス/物理学ではない)エンジンをどのように作成するか
自分で選んだアドベンチャーの本に似たシンプルなゲームを作りたい。プレイヤーには物語のテキストが表示され、可能性のリストからアクションを選択できます。これは、新しい物語のテキスト、広告無限につながります。唯一の問題は、以前の決定に応じて、可能性のリストが異なる可能性があることです。 一見すると、これは大量のif-elseステートメントのように聞こえるので、ルールエンジンが適切に機能することを意味します。しかし、それは私にとって有限状態マシンのようにも聞こえます。 これをJavaまたはGroovyで記述しようとしています。私は現在、概念的な問題、つまりこれを広範なレベルでどのように行うべきか(とにかく人々はチェスやカードゲームをどのように実装するのでしょうか)に興味がありますが、特定のライブラリに関するアドバイスも歓迎します。 明らかに、タイトルの「ゲームエンジン」は、衝突検出やその他の物理/グラフィックメカニクスを指すのではなく、プレイヤーが状況と彼の現在の状態に与えたオプションを決定するロジックです。

6
例外を伴うビジネスルールの表現
私はそれが高価であることを知っていますが、(IMO)それは非常に良い習慣だと思います。たとえば、営業担当者でない場合は請求書を保存できないなどのルールについて話しているので、その場合は「あなたは許可されていません」などの例外をスローします... 別のアプローチは、ステータスなどのオブジェクトを持つことです 他のアプローチはありますか?それについてどう思いますか?

5
外部コード内の任意の関数/クラスへの呼び出しを禁止する
システムでの負の結果を防ぐために、外部ライブラリとフレームワークのAPIへのアクセスを制限することが重要になる場合があります。 たとえば、SharePointアプリケーションではspList.Items.GetItemById、ループ内であっても、リストアイテムを取得するために呼び出すのが自然に思えるかもしれません。 また、テスト環境ですべての電子メールを適切にプロキシおよびモックできるように、全員に独自のクラスを使用して電子メールを送信させるために、SmtpClientの使用を禁止する必要がある場合もあります。 独自のコードの特定の特定の場所を除き、外部コードでこれらの制約を達成するための信頼できる合理的な方法はありますか?すべての状況下で、これらのメソッド/クラスへのアクセスを完全に禁止する必要はありません。たとえば、リフレクションまたは何らかの無効化によって、それらを使用しないことを厳しく警告する必要があります。できればプログラマーに積極的にこれらの制約を無効にするための措置をとるように強制します。

6
非常にスケーラブルで動的な「ルールベース」のアプリケーションですか?
大規模なエンタープライズアプリの場合、変更に対応できることがデザインの最も重要な側面の1つであることは誰もが知っています。ビジネスロジックの変化に対応するために、多くの場合、ルールベースのアプローチを使用しており、各ルールはDBに格納されています。これにより、厄介な詳細に飛び込むことなく、簡単に変更を加えることができます。C#はEval( "foo(bar);")を実行できないため、これは行に格納されたフォーマットされた文字列を使用して実行され、実行時にJavaScriptで処理されます。これは正常に機能しますが、エレガントではなく、レガシーになると、他の人が手に入れるのが最も楽しいものではありません。 これに対するよりエレガントな解決策はありますか?かなり頻繁に変更される何千ものルールに遭遇すると、それは本当のことになりますが、これは、誰かがこれを行うためのより良い方法を考えていない問題の珍しいことではありません。助言がありますか?この現在の方法は防御可能ですか?代替案は何ですか? 編集:明確にするために、これは大規模なエンタープライズアプリであるため、どのソリューションが機能しても、ルールとデータ(約10)を常に維持している人はたくさんいます。また、データは頻繁に変更されるため、ある種の集中サーバーシステムは基本的に必須であると言えます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.