問題タブ [database-design]
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.
sql - ソフト削除を実装するための最良の方法は何ですか?
現在プロジェクトに取り組んでおり、大多数のユーザー(ユーザーロール)に対してソフト削除を実装する必要があります。is_deleted='0'
データベース内の各テーブルにフィールドを追加し'1'
、特定のユーザーロールが特定のレコードの削除ボタンを押した場合にフィールドを設定することにしました。
今後のメンテナンスのために、各SELECT
クエリにはレコードが含まれていないことを確認する必要がありますwhere is_deleted='1'
。
ソフト削除を実装するためのより良い解決策はありますか?
更新:アプリケーションデータベース内のすべてのテーブル/フィールドへの変更(フィールド、古い値、新しい値、時間、ユーザー、IP)を追跡する監査データベースがあることにも注意する必要があります。
database-design - SaaSデータベースの設計-複数のデータベース?スプリット?
SaaSアプリケーションがさまざまな方法でホストされているのを見てきました。機能とモジュールを複数のデータベースに分割することをお勧めしますか?たとえば、あるDBにUserテーブル、別のDBに機能/アプリ固有のテーブル、別のDBに他の一般的に共有されているテーブルなどを配置しますか?
database-design - ソフト削除されたレコードの再利用
次のようなテーブル構造がある場合:
ここcode
で主キーはです。
ユーザーはレコードを作成し、後でそれを削除します。ソフト削除を使用しているため、isdeleted
はtrueに設定されます。次に、クエリでwhere句を使用してselectを実行しますand not isdeleted
これで、ユーザーが新しいレコードを作成しようとすると、コード「ABC」が存在しないことがわかり、再作成しようとした可能性があります。where句があるため、selectステートメントはそれを見つけられません。ただし、主キーインデックスエラーが発生します。
ユーザーがレコードを再利用できるようにする必要がありますか?ソフト削除のアイデアは、「削除された」レコードへの結合が引き続き機能するように、古いデータに対するクエリのレコードを保持することであるため、私はそうは思いません。ユーザーがコードの再利用を許可された場合、説明を変更して、履歴データの表示を変更する可能性があります。しかし、彼らがそのコードを使用するのを完全に止めるのは厳しすぎるのでしょうか?
または、完全に非表示の主キーを使用する必要があります。そうすれば、「コード」フィールドを再利用できますか?
sql - データがシステムに入ると、悪い悪いデータベース設計を修正する
私はそれが問題ではないことを知っています...とにかくここに問題があります。
このような1つのテーブルを持つデータベースを継承しました。その目的は、さまざまな(200の奇数)国で見つかった種を記録することです。
データのサンプルは次のようになります
これは典型的な多対多の状況であり、3つのテーブルが必要なようです。種、国、およびSpeciesFoundInCountry
リンクテーブル(SpeciesFoundInCountry)には、speciesテーブルとCountryテーブルの両方に外部キーがあります。
(図を描くのは難しいです!)
元のメガテーブルに1がある列名とSpeciesIDに基づいて、新しいCountryテーブルからCountryIDを取得する挿入ステートメントを生成する魔法の方法はありますか?
私は1つの国のためにそれを行うことができます(これは私が欲しいものを示すための選択です)
(メガテーブルは種と呼ばれます)
ただし、この戦略を使用すると、元のテーブルの各列に対してクエリを実行する必要があります。
SQLでこれを行う方法はありますか?
where句をまとめて、またはSQLを作成するためのスクリプトを作成することはできますが、エレガントではないようです。
何か考え(または説明が必要)?
database-design - データベース設計のルックアップ テーブル
現在、レガシーデータベースの設計を改善しようとしていますが、次のような状況があります
現在、LeadSource を格納するテーブル SalesLead があります。
リード ソースはテーブルに保存されているので便利です。
したがって、一方から他方への外部キーを作成し、正規化されていない列を削除したいだけです。
すべての標準的なもの、私は願っています。
これが私の問題です。私は書く代わりにその問題から逃れることができないようです
これは完全に明白であり、私は今書かなければなりません
また
LeadSource フィールドの内容を変更すると、これが壊れます。
私のアプリケーションでは、SalesLead の LeadSource の値を変更したいときはいつでも、1 から 2 に更新したくありません (たとえば)。開発者にこれらのマジック ナンバーを覚えさせたくないからです。ID は任意であり、そのままにしておく必要があります。
アプリのコードでそれらへの依存を削除または無効にするにはどうすればよいですか?
私のソリューションがサポートしなければならない言語を編集する
- .NET 2.0 + 3 (価値のある asp.net、vb.net、および c#)
- vba (アクセス)
- デシベル (MSSQL 2000)
2.0編集結合は問題ありませんが、リクエストに応じて「foo」が「foobar」に変更される可能性があり、クエリを実行したくありません。
database - 外部キーの何が問題になっていますか?
Joel Spolskyがポッドキャスト 014で、外部キーをほとんど使用したことがないと述べたのを聞いたのを覚えています (私の記憶が正しければ)。ただし、データベース全体での重複とその後のデータ整合性の問題を回避するために、それらは非常に重要に思えます。
人々はその理由について確固たる理由を持っていますか (Stack Overflow の原則に沿った議論を避けるため)?
sql - データベースにデータ整合性ルールを適用するにはどうすればよいですか?
このクラスと抽象(MustInherit)クラスのコレクションを設計しています…</ p>
これは、これらすべてを格納するデータベーステーブルです…</ p>
Microsoft SQL Serverデータベースが知る限り、これらはすべてnull許容( "Allow Nulls")列です。
しかし実際には、そこに格納されているクラス(LinkNode、HtmlPageNode、またはCodePageNode)によって異なります。
ルールは次のようになります...
データベース内でこのようなデータ整合性ルールを適用するにはどうすればよいですか?
更新:この単一テーブルの設計について...
私はまだ最終的なアーキテクチャに焦点を合わせようとしています。
私は当初、nullalbeフィールドがほとんどない多くの小さなテーブルから始めました。
ナビゲーションに最適なデータベーススキーマはどれですか?
そして、LINQ toSQLIsDiscriminatorプロパティについて学びました。
SQLで1対1の関係を処理するための最良の方法は何ですか?
しかし、LINQtoSQLは単一テーブル継承のみをサポートしていることを学びました。
LINQ to SQL IsDiscriminator列は継承できませんか?
今、私はクラスと抽象クラスのコレクションでそれを処理しようとしています。
.NET抽象クラスを手伝ってください。
ruby-on-rails - 部分的な日付 (つまり、年だけ、おそらく月も) を保存し、後で同じ仕様で出力するにはどうすればよいでしょうか?
ユーザーが日と月を含む場合と含まない場合がある日付を指定できるようにしたい (ただし、少なくとも年は含まれる)。問題は、DB に日時として格納される場合です。欠落している日/月はデフォルト値として保存され、元の形式と日付の意味が失われます。
私の考えは、日時列に加えて、実際の形式を文字列として列に格納することでした。次に、他のすべての日付と日時を表示する必要があるときはいつでも、文字列列を使用できます。欠点は、表示したいテーブルのすべての日付列に余分な列が1つ追加されることです。日付時刻の値に依存できないため、ローカライズされた日付を印刷するのは簡単ではありません...おそらく文字列を解析する必要があります.
私は何かを見落としていて、もっと簡単な方法があるかもしれないと思っています。
(解決に問題がある場合は、Rails を使用していることに注意してください。)
database - リレーショナル データベースのユーザー テーブルとピープル テーブルの分離
私は多くの Web アプリを作成しました。最初に行うことは、ユーザー名、パスワード、名前、電子メール、およびその他の通常のすべての flotsam を含むユーザー テーブルを作成することです。私の現在のプロジェクトは、非ユーザー レコードがユーザーと同様に機能する必要がある状況を示していますが、一次ユーザーになる能力は必要ありません。
people_tb
メインのリレーショナル テーブルおよびデータ ストアである 2 番目のテーブル を作成し、users_tb
を認証のみに使用することは合理的ですか? user_tb
からの分離はpeople_tb
何か問題がありますか? これが一般的に行われている場合、いくつかの戦略と解決策、および欠点は何ですか?
string - 人の名前を構成要素に解析する簡単な方法は?
多くの連絡先管理プログラムがこれを行います。名前 (「John W. Smith」など) を入力すると、内部的に次のように自動的に分割されます。
名:ジョン
ミドルネーム: W.
姓:スミス
同様に、"Mrs. Jane W. Smith" や "Dr. John Doe, Jr." などを計算します。正しくも同様です(名前に「接頭辞」や「接尾辞」などのフィールドを許可すると仮定します)。
これは、人々がやりたいと思うかなり一般的なことだと思います...だから問題は...どうやってやりますか? これには簡単なアルゴリズムがありますか?もしかして正規表現?
私は .NET ソリューションを求めていますが、うるさいわけではありません。
更新:すべてのエッジケースと文化をカバーする簡単な解決策がないことを理解しています...しかし、議論のために、名前をバラバラにする必要があるとしましょう(フォームに記入する-たとえば、税金やその他のように)政府のフォーム - 好むと好まざるとにかかわらず、固定フィールドに名前を入力しなければならないケースの 1 つですが、必ずしもユーザーに個別のフィールドに名前を入力するよう強制する必要はありません (入力が少ない = より簡単です)。初心者ユーザー)。
最初、中間、最後などをプログラムに (できる限り) "推測" させたいと思うでしょう。可能であれば、Microsoft Outlook が連絡先に対してどのようにこれを行うかを見てください。名前を入力することはできますが、明確にする必要がある場合は、開くことができる特別な小さなウィンドウがあります。私は同じことをします - ユーザーが別々の部分に名前を入力したい場合に備えてウィンドウを提供します - ただし、1 つのボックスに名前を入力し、最も一般的な名前をカバーする「最良の推測」を行うことができます。