タグ付けされた質問 「database」

このタグは、一般的なデータベースの質問用です。SQLに固有の質問の場合は、代わりにそのタグを使用してください。

6
廃止されたデータベース列の廃止に関するベストプラクティスは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 早い段階でクライアントからデータA、B、Cを収集するアプリケーションを設計していますが、後でデータA、B、Dを収集します。 A、B、C、およびDは非常に関連性が高く、現在は単一のデータベースPostgreSQLテーブルTの列として存在しています。 Cが不要になったら、アプリケーションからその参照を削除します(Django ORMを使用します)が、既に入力されたデータを保持します。そうするための最良の方法は何ですか? ABD用の新しいテーブルを作成することを考えましたが、それはテーブルTを参照する行で問題が発生する可能性があることを意味します。 列Cをそのまま残し、コード内の列Cへの参照を削除して、既存のデータが生き残るようにすることができます。 表示されていないより良いオプションはありますか? いくつかの追加の詳細: 行の数は多くなく、おそらくユーザーごとに1〜2です。これは大衆市場のアプリケーションですが、CからDに切り替えるまでに、ユーザーベースはまだそれほど大きくありません。CとDは同時に収集されない可能性がありますが、可能性はあります。CとDは、それぞれ1つだけでなく、複数の列を表している可能性があります。

2
メールアドレスをデータベースにプレーンテキストとして保存する必要がありますか?
少なくともソルト/ハッシュせずにパスワードを保存するのはひどい考えであることは誰にとっても明らかです(私は願っています)。 メールはどうですか?サブスクリプションの電子メールアドレスを保持しているとしましょう。適切に暗号化すると、ユーザーに電子メールを送信することができなくなる可能性があります。一方、暗号化せずにデータベースが盗まれると、すべてのユーザーが潜在的なスパムの危険にさらされます。 この質問は、法律に固有の問題(それらは与えられるかもしれませんが、国依存のままです)やデータベース自体の暗号化に関するものではありません。

3
「このウェブサイト/アプリをどのように構築しますか」インタビューの質問に対する一般的な思考プロセス[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 「フォトアルバムアプリケーションの設計方法を説明する」、「この特定のWebサイトのこの特定の機能を設計する方法を説明する」などのインタビューの質問を収集しましたブラックジャックの)。次に、このものが何百万ある場合はどうなりますか?何を変えますか? これは、データベーススキーマまたはクラス定義の束(またはその両方)を想定しているようです。私は学校でデータベースについて学んだことがありますが、実際にアプリケーションを設計したことがなく、どこから始めればよいか、思いついた設計が「良い」かどうか、スケーラブルにするために何を変更できるかがわかりません。 これらのシステムを設計するとき、一般的なアプローチまたは思考プロセスはありますか?そして、私が回避しようとする必要がある設計で多くのように思われる一般的な問題/問題?誰かが私にこれらの1つ(または好ましくはすべて、それぞれのニーズを比較しながら)を見て、説明することができますか? 1)どのエンティティが必要かをどのように思い付きますか?2)すべての関係をどのように決定しますか?3)パフォーマンスの最適化を設計にどのように組み込みますか?4)クラスまたはデータベースを使用してこれを行いますか?違いがありますか(つまり、実際にデータベーステーブルに変換できないクラスがあるでしょうか?) 私が質問している主な理由は、「コーディングインタビューをクラックする」ことを行っていたためであり、私の答えは著者のものとは完全に異なっていたためです。 私の試み: 写真共有アプリを使えば、クラスとテーブルが必ずあります:写真とユーザー。 次に、スキーマを作成しようとしている場合、写真の各人が写真にリンクされていると仮定すると、写真とユーザーをリンクするテーブルがあると思います(このテーブルは必要ですか?そうでない場合でも、それはまだ一般的な習慣ですか?多対多のリレーションシップ用に別のテーブルを作成するかどうか)。 しかし、オブジェクト指向のアプローチをとろうとしている場合は、代わりに、すべての作業を実行し、他の2つのテーブル/クラスからのすべての情報を保持するalbumというクラスを用意します。これは私が本で気づいた1つのことです-クラスの束があり、基本的にすべての情報を持ち、他のクラスを接続する1つのクラス-これは一般的ですか?たとえば、上記の私の例では、これは適用されるように見えますか? 現時点では、大規模システムの優れたアーキテクチャがどのように見えるかを知る方法がわからないため、いくつかの一般的なルール/ガイドラインに従うことを望んでいます。

6
データベースの正規化後もインデックス作成が必要ですか
適切な正規化を行った後でも、テーブルのインデックスを作成する必要がありますか?これはパフォーマンスにどのように影響しますか?適切に正規化した後、何らかの形でパフォーマンスに影響を与えますか? 主キーと外部キーが既にある場合、通常どの列にインデックスが付けられますか? データベースを正規化することはすでに効果的であるようです。しかし、索引付けがデータベースに与える影響をスキップしたかもしれません。これは、クエリを使用する場合にのみ有効ですか?これはどのように機能/実行し、データベースを改善しますか?

4
SQLおよびデータ操作機能を備えたTDD
私はプロのプログラマーですが、ソフトウェアエンジニアリングの正式なトレーニングを受けたことはありません。私は頻繁にここを訪れているので、可能な限りユニットテストを書く傾向に気づきました。私のソフトウェアがより複雑で洗練されているので、デバッグを支援するための自動化されたテストをお勧めします。 ただし、私の仕事のほとんどは、複雑なSQLを作成してから、何らかの方法で出力を処理することです。たとえば、SQLが正しいデータを返していることを確認するテストをどのように作成しますか?次に、データが制御されていなかった場合(たとえば、サードパーティシステムのデータ)、ダミーデータの連を手書きせずに処理ルーチンを効率的にテストするにはどうすればよいでしょうか。 私が考えることができる最良の解決策は、一緒にほとんどの場合をカバーするデータのビューを作成することです。次に、これらのビューをSQLに結合して、正しいレコードを返しているかどうかを確認し、ビューを手動で処理して、関数などが意図したとおりに動作しているかどうかを確認します。それでも、それは過度で薄汚いようです。特にテストするデータを見つける...

5
128/256/4096バイトオフセットに丸められたVARCHARサイズを使用する理由はありますか?
データベーススキーマでは、VARCHARサイズがバイトオフセット128/256または4096に丸められることがよくあります。これも以前に行ったことがあり、その背後にあるアイデアはおそらく効率的なものでした。 しかし、今日そうする正当な理由はまだありますか?最近ではVARCHARサイズとして '50'、 '100'、または '200'をよく使用します。これらはより自然で、通常はユーザーに対する検証チェックでも表示されるためです。

6
データベースプログラマーは何をしますか?
Oracleプログラマーなどについて読むたびに、混乱します。私は彼らが何をするのか正確には知りません。 私の理解では、アプリケーションプログラマはコア機能を開発する必要があります。彼らが使用するライブラリは、GUI開発やデータベース接続に役立つかもしれませんが、そのアプリケーションをプログラムする必要があり、すべてのアプリケーションを異なるものにする機能があります(他のものの微調整バージョンもあります)。 この関係では、データベースプログラミングは基本的にテーブルを作成しておらず、これらのテーブルは、通常フロントエンドであるアプリケーションによって発行されたSQLステートメントに応答して処理されませんか?テーブルの作成は大したことですか?

4
データベースの観点からリアルタイムデータを処理する方法
私は念頭に置いて考えていますが、それでもデータベース領域を混乱させます。 ことを想像し、私はリアルタイムデータを表示したい(し、最新のブラウザ技術の一つを用いてウェブソケットは -にも使用して古いブラウザを、それが何をしているのか、誰もすべての観測(ユーザーのブラウザ)に表示するために非常に簡単です)。 レミー・シャープは、これについての単純さについての例を持っています。 しかし、私はまだデータベース部分を取得していません、どのようにフィードするのですか?データベースに接続された各ユーザーのパスを保存し、クライアントが何が起こっているのかを見たい場合は(Remy game Tronを使用して)想像してみましょう5秒の遅延が、彼はその瞬間まで、その、5秒だけでなく、表示されます時間に継続を ... そのようなDBにクエリするにはどうすればよいですか? SELECT x, y FROM run WHERE time >= DATEADD(second, -5, rundate); 推奨されるパスではありませんか? そして、このxをx時間で引き出します...これは、実際のデータフィードが正しくありませんか? 誰かがデータベースの観点を理解するのを手伝ってくれるなら、私は大いに感謝します。
14 database  sockets 

3
ORMはデータベースの非正規化を促進しますか?
DoctrineとPropelは両方とも単一および具体的なテーブル継承を利用してオブジェクトの関係をマップします。前者は単一のテーブルにマッピングされたクラスツリー内のすべての可能なフィールドを参照しますが、後者は各クラスを特定のテーブルにマッピングし、継承階層の共通フィールドを複製します。 これによりORM装置が容易になりますが、データベース設計が悪いことを示唆しています。これらの悪い設計パターンは、データベースに適用されますか?

4
ベンチマークデータベース
db 'x'のパフォーマンス、または 'x'から 'y'に移行するとサイトのパフォーマンスが向上するという議論が飛び交っています。 さまざまな種類のデータベース間で機能する適切なベンチマークをまだ見ていません。 リレーショナル、ドキュメント指向など、複数のDBタイプで使用できる意味のあるベンチマークを作成することは可能ですか? そのようなベンチマークをどのように設計しますか?

4
文字列のリストを単一のデータベースフィールドに格納することは悪い考えですか?どうして?
最近、いくつかのレガシーシステムに取り組み始めました。それを開発した人々は、データベーステーブルの単一のフィールドに文字列のリストを格納するというアイデアを思いつきました。これは、データベースに表現もデータもないオブジェクトの識別子であるとしましょう。その識別子の範囲は、本番環境では比較的小さくなります。 一方、私の直感と「良いデザインの好み」は、別のテーブルで表現する必要があることを示しています(多対多の関係を表すために使用されるテーブルと同様)。 彼らのアプローチは本当に悪いのですか?リファクタリングを開始する方が良いでしょうか?はいの場合、元の設計が将来どのような悪影響をもたらす可能性がありますか?そのアプローチを説明するリレーショナルデザインの原則はありますか? コメントの返信を編集: おそらく、彼らはこのアプローチを使用して、階層構造化などの特定の問題を巧妙な方法で解決していません。最もありそうなシナリオは、彼らが時間のプレッシャーの下で単に働いていて、できるだけ早く新機能を実装する必要がある場合でした。 以前はフィールドが単一の値を表していたと思います。彼らは複数の値を保存する機能を実装する予定で、データベースの移行を回避しようとしました。

1
データベース内のドメインモデルは持続可能なソリューションになりますか?
私は、Microsoftテクノロジーをベースにした中小企業のデータベース開発者として新しい仕事を始めました。私は、ベストプラクティス、設計パターン、テスト、およびプロジェクト管理に関して、学校で教えられたものからどれだけのプラクティスが逸脱しているかに早く気づきました。 私を最も悩ませているのは、メインのデータベース開発者(以下、「ジョン」と呼びます)がデータベースにモデルスキーマを保持する方法です!これを行うには、3つの「マジック」テーブルを使用します。1つはデータベーススキーマ用、1つはテーブル用、もう1つは列用です。 レコードを「テーブル」テーブルに挿入すると、実際の対応するテーブルが(データベーストリガーを介して)生成されます。「Rows」テーブルに行を挿入すると、参照されているテーブルがその行で更新されます。これらは、彼の手作りのC#プログラムによって順番に読み取られ、C#モデルを生成します。これは、フロントエンド開発者がコントローラーおよび外部向けに使用します。 これとは別に、ほとんどの開発はASP.NET MVCフレームワークに従って行われます。 このアプローチにはいくつかの欠陥があります。 ORMを維持するために彼が必要であり、そうする時間はめったにありません(ジョブのセキュリティは良いです!) 「テーブル」および「行」テーブルのトリガーに欠陥があります。テーブルの更新も、チェック制約や「高度な」機能もサポートしていません。それらを確実に改善することはできましたが、これが道筋かどうかはまだわかりません。 データベース内のプログラムロジックを維持することは、奇妙で制限されているように感じます(ただし、C#を使用してモデルを拡張することは可能です)。 彼のC#モデルジェネレーターは、3人のうちの1人(私は1人)によって手動で実行する必要があり、まだ自動化されたビルドプロセスに含まれるほど成熟していません。 Entity Frameworkのような真のテスト済み製品への段階的導入を提案した人もいますが、彼はそれを却下し、ビジネスロジックをコード層に保持することは小規模なアプリケーションとスタートアップのブートストラッププロジェクトにのみ適していると主張しました。 この投稿は、意見を述べた議論のように見えるものに向かっていますが、それは私の意図ではありません。私たちのアーキテクチャのアプローチに関する明確化が必要です。 データベースにドメインモデルを保持することは、成長中の企業にとって持続可能なソリューションになりますか?

2
余分な列を持つ単一のテーブルとスキーマを複製する複数のテーブル
私はプロジェクトに取り組んでいます。ある時点で、データベースに、すべてのレコードが使用するわけではない複数の列を持つ単一のテーブル、または複製されたスキーマを持つ複数のテーブルが必要かどうかを決定する必要がありました。 複数のスポーツを処理できるスポーツ情報アプリケーションを作成しています。たとえば、NBA、NHL、MLB、NFLを処理できます。各スポーツには、チーム、スケジュール、怪我、選手情報など、非常に似た概念があります。 もちろん、データソースは同じスキーマ内の各データを提供しません。各スポーツには、ベンダーからデータを受け取る異なるスキーマがあります。 共通性を判断するためにデータフィードの事前分析を行うのに十分な時間(クライアントの要求)がなかったため、賭けをヘッジし、「安全な賭け」を行い、すべてのテーブルのセットの代わりに、スポーツごとに個別のテーブルを作成しました使用されるスポーツ。 その結果、いくつかのテーブルでスキーマが複製され、データベースへのインターフェイス(ストアドプロシージャなど)も複製されます。NBA_Game、NFL_Game、NBA_Team、NFL_Teamなどがあります。各テーブルには、他のテーブルにはないプロパティがいくつかあり、いくつかのプロパティは共有されています。4〜5回のスポーツで5〜10個のテーブルが続きます。これが完全に悪いことであるかどうかはまだわかりません。すべてのスポーツが使用するわけではないプロパティを持つテーブルの単一セットを持つ代替案は、それ自体も扱いにくいかもしれません。 これを行った人は、この種の設計の落とし穴にぶつかり、ここで自分の経験を共有できますか?将来の困難な方法を学ぶのではなく、今私が知るのに役立つかもしれないことは何ですか?すべてのレコードが使用するわけではない列を使用して、1つの大きなテーブル/テーブルのセットを使用して、別の方法でそれを実行しましたか?どんな落とし穴に遭遇しましたか? 過去に使用したテーブル継承など、より適切に機能する代替手段はありますか? ありがとう

5
データベースの使用は、テキストファイルからのデータの解析よりも優先されるべきですか?
codereview.SEの成長を測定するPythonプログラムを作成していました。私のアプローチは、フロントページに表示される「サイトの統計」を取得し、ハードドライブに保存することでした。これは毎日1回行う予定です。これまでに、統計を取得してテキストファイルに追加するのに十分な量を作成しました。Pythonスクリプトはgithubで表示できます。私が使用している形式は次のとおりです 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 22-08-2013 questions 9073 answers 15326 answered 88 users 26102 visitors/day 7407 スクリプトを2回実行して、ファイルで使用する形式を取得しました。最初は自分で保存するので、フォーマットは同じであるため、簡単に解析できますが、よくわかりません。データベースを使用する方が、データを取得する方が簡単であるため、ここではより良いはずです。ただし、データベースを使用したことがなく、SQL、MySQL、またはRDBMSのその他のバリアントについての知識もありません。 だから、これは私に質問をもたらします。データをテキストファイルに保存するよりも、データを保存するのにデータベースを優先すべき場合 データベースが必要なのか、単純なテキストファイルが必要なのかを判断する際に参照できるポインタはありますか? PS:より良いタグを追加できる場合は追加してください。追加できるタグについて疑問がありました。

4
データベース履歴表/追跡表
現在、次のように追跡/履歴テーブルを構造化します。 PrimaryKey-ID OtherTableId-fk fieldName-追跡するフィールドの名前 OldValue NewValue ユーザー名 CreateDateTime したがって、基本的には、別のテーブル履歴を追跡し、変更されたフィールドの列名を新しい値と古い値で保存するテーブルが必要です。私の質問は、誰でもこれに穴を開けることができますか?また、その追跡がテーブルの列名のみがfieldName列に入力されるようにする最も簡単な方法は何ですか?現在、私のオプションは、作成中のサービスに列挙を含めるか、別のステータステーブルを作成してfieldNameをfkにすることです。より良いアイデアはありますか? 目標の編集:現在、追跡する必要があるフィールドは2つだけです。1つのフィールドはWebページに表示され、履歴が表示されます。もう1つのフィールドには1つの部門のみがアクセスし、クエリ可能なデータベースのビューにアクセスできます。彼らは、この1つのフィールドだけを照会して、フィールドを変更したユーザーと何に関する情報を取得します。これが、テーブルレコード履歴の正確なコピーではなく、データベースフィールドがテーブル列を定義する場所に設定したかった理由です。将来的にフィールドを追加または削除する可能性がある2つのフィールドのみを追跡する必要があります。 ありがとう!
13 database  sql  tracking 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.