問題タブ [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.
database - SQL で 1 対 1 の関係を処理する最良の方法は何ですか?
Bravo や Charlieに関連しているかもしれないし、関連していないかもしれない Alpha のものを持っているとしましょう。
これらは 1 対 1 の関係です。アルファは複数のブラボーに関連付けられません。また、ブラボーが複数のアルファに関連付けられることはありません。
私はいくつかの目標を持っています:
- 習得と保守が容易なシステム。
- データベース内で実施されるデータの整合性。
- 私のデータの実世界の論理的な編成に一致するスキーマ。
- 私のプログラミング内のクラス/オブジェクトは、データベース テーブルに適切にマップされます (Linq から SQL に似ています)
- 高速な読み取りおよび書き込み操作
- スペースの有効利用 (null フィールドが少ない)
3つのアイデアがあります...
多くの nullalbe フィールドを持つ 1 つのテーブル (フラット ファイル)…
nullalbe フィールドがゼロの多くのテーブル…
両方の最良(または最悪):多くのテーブルへのnullalbe外部キーがたくさん…
アルファがブラボーまたはチャーリーのいずれかである必要があり、両方ではない場合はどうなりますか?
ブラボーとチャーリーだけでなく、アルファがデルタ、エコー、フォックストロット、ゴルフなどのいずれかになるとしたら…?
編集:これは質問の一部です:私のナビゲーションに最適なデータベース スキーマはどれですか?
sql-server - SQL Serverでカスケードを使用するのはいつ/なぜですか?
SQL Serverで外部キーを設定する場合、どのような状況で削除または更新時に外部キーをカスケードする必要がありますか。また、その背後にある理由は何ですか。
これはおそらく他のデータベースにも当てはまります。
私は何よりも、各シナリオの具体的な例を探しています。できれば、それらをうまく使用した人からの例を探しています。
database - より良いデータベース設計はどれですか?テーブルを増やすか列を増やすか?
以前の同僚は、テーブル数が多く、列数が少ないデータベースの方が、テーブル数が少なく、列数が多いデータベースよりも優れていると主張しました。たとえば、名前、住所、都市、州、郵便番号などの列を持つ顧客テーブルではなく、名前テーブル、住所テーブル、都市テーブルなどを作成します。
彼は、この設計はより効率的で柔軟であると主張しました。おそらくより柔軟ですが、その効率性についてコメントする資格はありません。たとえそれがより効率的であったとしても、それらの利点は、追加された複雑さによって上回る可能性があると思います.
So, are there any significant benefits to more tables with fewer columns over fewer tables with more columns?
database-design - 大規模なシステム変更の実施
「捨てるために作る」というフレーズに慣れているなら、まあ、私たちはそれをやったようです。オンライン アプリのバージョン 1 の制限に達しています。次の方法で物事をクリーンアップする時が来ました。
- コードと UI の再編成
- UI プロセスの統一
- より多くの機能を追加する
- 未来のための建物
- 上記のすべてを処理するためにデータベース構造を変更する
この移行を実現する最善の方法は何ですか?
すべてのユーザーを (システムが完成したら) 新しいシステムに引き渡すことは避けたいと考えています。私たちのユーザーは、技術的に熟練した使い慣れたソフトウェア タイプから、HTML が何であるかを知らないタイプまで、あらゆる範囲を実行します。
システムの新しい「インストール」を開始し、この新しい設計がバージョン 1 の問題を十分に解決したことを確認した後、ユーザーを徐々に移行する必要がありますか?
システムの各モジュールを(どういうわけか)段階的に変更し、段階的に変更する必要がありますか?データベースのレイアウトが変更され、「コア コード」といくつかの周囲のモジュールのコードを微調整する必要があるため、これは難しい場合があります。
アプリの最新バージョンを使用する、信頼できる忍耐強い「ベータ テスター」クライアントのセットを持つことは一般的ですか? (ここでの目標は、フィードバックを得て、新しいシステムのバグをテストすることです)
他にアドバイスはありますか?初体験?
mysql - ON DELETE CASCADE制約はどのような順序で処理されますか?
これが私が行っていることの例です:
Uncle-Child関係にはONDELETECASCADEがないことに注意してください。つまり、子を削除してもその叔父は削除されません。その逆も同様です。
親と同じ子を持つ叔父がいて、親を削除すると、InnoDBは「それを理解」して、家族全体にカスケードを波及させることができるはずです(つまり、親を削除すると叔父が削除されます)と子供も)。ただし、代わりに、次のようになります。
InnoDBは、子を参照する叔父の前に子をカスケード削除しようとしています。
私は何かが足りないのですか?どういうわけかわからないので失敗するのでしょうか?それとも、それを機能させるためのトリックがありますか(またはMySQLのバグですか)?
security - ユーザー アカウントの認証とパスワードを処理する最適な方法
データベースにアクセスできる従業員がアカウントにアクセスできるようにすることなく、システムでユーザーアカウント管理を処理する最良の方法は何ですか?
例:
ユーザー名/パスワードをデータベースに保存します。データベースにアクセスできる人なら誰でもユーザー名とパスワードを見ることができるため、これは悪い考えです。したがって、それを使用します。
ユーザー名/パスワードのハッシュを保存します。これはより良い方法ですが、データベース内のパスワード ハッシュを、認証情報を知っている別のアカウントのハッシュに置き換えることで、アカウントにアクセスできます。次に、アクセスが許可された後、データベースに戻します。
Windows/* nix はこれをどのように処理しますか?
sql-server - 会計アプリケーションの金額に浮動小数点数または小数を使用しますか?
VB.NET と SQL Server で従来の会計システムを書き直しています。書き換えを行うために、.NET/SQL プログラマーの新しいチームを招集しました。システムのほとんどは、フロートを使用した金額ですでに完成しています。私がプログラミングした従来のシステム言語には浮動小数点数がなかったので、おそらく 10 進数を使用していたでしょう。
あなたのおすすめは何ですか?
金額に float または decimal データ型を使用する必要がありますか?
どちらの長所と短所は何ですか?
デイリー スクラムで指摘された欠点の1 つは、小数点以下 2 桁を超える結果を返す金額を計算するときは注意が必要だということです。金額を小数点以下2桁に四捨五入する必要があるようです。
もう 1 つの短所は、すべての表示と印刷された金額に、小数点以下 2 桁を示すフォーマット ステートメントが必要なことです。これが行われておらず、金額が正しく見えないことが何度かありました。(つまり、10.2 または 10.2546)
プロは、浮動小数のみのアプローチがディスク上で8バイトを占めることです.10進数は9バイト(10進数の12,2)を消費します。
database - サロゲート キーと自然/ビジネス キーの比較
繰り返しますが、古い議論がまだ発生しています...
ビジネス キーをプライマリ キーとして使用する方がよいでしょうか。それとも、ビジネス キー フィールドに一意の制約があるサロゲート ID (つまり、SQL Server の ID) を使用する方がよいでしょうか。
あなたの理論を裏付ける例または証拠を提供してください。
design-patterns - 複数の値を持つエンティティに最適な設計
詳細な情報を取得している車両のようなエンティティがあるとします。撮りたい車は赤、黒、白に塗られています。フロントタイヤはブリヂストンの275/35-18、リヤタイヤは325/30-19。また、タイヤが 2 つしかない場合もあれば (これは車両の一種であるオートバイと見なされます)、18 本のタイヤがすべて異なる場合もあります。次に、エンジンのサイズのように、常に単一の値であるフィールドがいくつかあります (想像力を働かせると、複数のエンジンを搭載した車両を考えることができますが、私はこれを単純にしようとしています)。
これに対処するための現在の戦略は、複数の値を持つことができるフィールドごとにテーブルを用意することです。これにより、多数のテーブルが生成され (この要件を持つさまざまなエンティティが多数あります)、少し臭いがします。これが最善の戦略ですか?そうでない場合、何が良いでしょうか?
sql - 動的データベーススキーマ
動的論理データベーススキーマにストレージを提供するために推奨されるアーキテクチャは何ですか?
明確にするために:システムが、本番環境でユーザーによってスキーマが拡張または変更される可能性のあるモデルにストレージを提供する必要がある場合、これを可能にする優れたテクノロジー、データベースモデル、またはストレージエンジンは何ですか?
説明するためのいくつかの可能性:
- 動的に生成されたDMLを介したデータベースオブジェクトの作成/変更
- 多数のスパース物理列を含むテーブルを作成し、「オーバーレイされた」論理スキーマに必要な列のみを使用する
- 動的な列の値を行として格納する「長くて狭い」テーブルを作成します。このテーブルは、特定のエンティティのすべての値を含む「短くて広い」行セットを作成するためにピボットする必要があります。
- BigTable /SimpleDBPropertyBagタイプのシステムを使用する
実社会での経験に基づく回答をいただければ幸いです。