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

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

9
リレーショナルデータベースは、各列に定義済みのデータ型を設定することで何が得られますか?
私は今、SQLデータベースを使用していますが、これは常に興味をそそりますが、Google検索はあまり現れません。なぜ厳密なデータ型なのでしょうか? たとえば、バイナリデータとプレーンテキストデータの区別が重要であるなど、いくつかの異なるデータ型がある理由を理解しています。バイナリデータの1と0をプレーンテキストとして保存するのではなく、バイナリデータを独自の形式で保存する方が効率的であることを理解しています。 しかし、私が理解していないのは、非常に多くの異なるデータ型を持つことの利点です: なぜmediumtext、longtextとtext? なぜdecimal、floatとint? 等 「この列のエントリにはプレーンテキストデータが256バイトしかありません」とデータベースに伝えることの利点は何ですか。または「この列には最大16,777,215バイトのテキストエントリを含めることができますか?」 パフォーマンス上のメリットはありますか?もしそうなら、手作業の前にエントリーのサイズを知ることがパフォーマンスに役立つのはなぜですか?それとも、まったく別のものですか?

2
モバイルアプリのデータ同期-複数のデバイス、複数のユーザー
初めてのモバイルアプリの構築を検討しています。アプリケーションのコア機能の1つは、複数のデバイス/ユーザーが同じデータにアクセスできることです。すべてのデバイス/ユーザーはCRUD権限を持ちます。 アーキテクチャには、すべてのデータが保存されている中央サーバーが必要だと思います。デバイスはAPIを使用してサーバーと対話し、データ操作(レコードの追加、レコードの編集、レコードの削除など)を実行します。 データの同期が問題になるシナリオを想像します。アプリケーションがインターネットに接続されていないときに機能する必要があるため、この中央サーバーと通信できないと想定します。そう: ユーザーAはオフラインで、レコード#100を編集しています ユーザーBはオフラインで、レコード#100を編集しています ユーザーCはオフラインで、レコード#100を削除します ユーザーCがオンラインになります(おそらく、レコード#100がサーバー上で削除されるはずです) ユーザーAとBはオンラインになりますが、編集したレコードはもう存在しません 上記に類似したあらゆる種類のシナリオが考えられます。 これは一般的にどのように処理されますか?私はMySQLを使用する予定ですが、そのような問題に適切でないのではないかと思っています。
42 database  mysql  data  mobile 

6
データベースから文字列として日付を返さないのはなぜですか?
典型的なWebアプリケーションでは、日付は強く型付けされたデータベースレイヤーから取得されます(たとえば、c#ではSystem.StringではなくSystem.DateTimeとして)。 日付を文字列として表現する必要がある場合(ページに表示するなど)、DateTimeから文字列への変換はプレゼンテーション層で行われます。 どうしてこれなの?DateTimeをデータベース層の文字列に変換するのはなぜ悪いことですか? チャットでの激しい議論や、これを始めた最初の質問も見てください。

7
アプリケーションがローカルでのみ処理を行う場合、データベースサーバーを使用する意味がありますか?
基本的にはシステムに対してローカルで実行されるアプリケーションソフトウェアであるアプリケーションを見てきました(したがって、それらはネットワークを介してあまり通信しません)。これらのアプリケーションは、データを保存するためにデータベースサーバーに依存しているようです。 アプリケーションの例は、Amarok(Linuxで人気のある音楽プレーヤー)です。彼らがまだこれを行うかどうかはわかりませんが、Amarokをインストールすると、MySQLサーバーをインストールし、常にバックグラウンドで実行する必要があったことを覚えています。 sqliteのような小さな埋め込みSQLソリューションを使用する場合と比較して、ローカルストレージにサーバーを使用する利点は何ですか?私はアプリケーションソフトウェア全般について話しているが、必ずしもamarokとは限らない(これは単なる例である)。組み込みデータベースと比較して、データベースサーバーの使用が理にかなっている状況はありますか?

3
ビジネスルールの保存に構成ファイルまたはデータベースを使用する必要がありますか?
私は最近、Pragmatic Programmerを読んでいます。 詳細は、特に頻繁に変更される場合に、元のコードを台無しにします。ビジネスロジック、法律、またはその日の経営陣の個人的な好みの変化に対応するためにコードを変更する必要があるたびに、新しいバグを導入するというシステムを破壊するリスクがあります。 ハント、アンドリュー; トーマス、デビッド(1999-10-20)。実用的なプログラマー:ジャーニーマンからマスターへ(Kindle Locations 2651-2653)。ピアソン教育(米国)。キンドル版。 私は現在、値のセットからのみ取得できるプロパティを持ついくつかのモデルを持つWebアプリをプログラミングしています(Webアプリのデータは機密ではないため)。 light-> type =球/立方体/円柱 ライトのタイプは上記の3つの値のみにすることができますが、TPPに従って、値を変更して構成ファイルに配置できるように常にコーディングする必要があります。アプリ全体でこれのいくつかの事件があるので、私の質問は次のとおりです。 これらのような値を次の場所に保存する必要があります。 構成ファイル: 'light-types' => array(sphere, cube, cylinder), 'other-type' => value, 'etc' => etc-value データベース内の構成テーブルごとに1行の単一テーブル 各設定項目のテーブルを持つデータベース(例えば表:light_types;カラム:id、name) 他の方法は? 提供された支援/専門知識に感謝します。

4
ゼロダウンタイム展開の実現
停止時間ゼロの展開を達成しようとしているので、理論的には、営業時間外に少なく、「遅い」時間にもっと多く展開できます。 私の現在のセットアップ、やや単純化された: WebサーバーA(.NETアプリ) WebサーバーB(.NETアプリ) データベースサーバー(SQL Server) 私の現在の展開プロセス: WebサーバーAとBの両方のサイトを「停止」する デプロイされているアプリのバージョンのデータベーススキーマをアップグレードする WebサーバーAを更新する WebサーバーBを更新する すべてをオンラインに戻す 現在の問題 これにより、毎月わずかなダウンタイムが発生します(約30分)。私は休み時間にこれを行うので、それは大きな問題ではありません-しかし、それは私が逃げたいものです。 また-実際に「戻る」方法はありません。通常、ロールバックDBスクリプトは作成せず、スクリプトのみをアップグレードします。 ロードバランサーの活用 一度に1つのWebサーバーをアップグレードできるようになりたいです。WebサーバーAをロードバランサーから取り出してアップグレードし、オンラインに戻し、WebサーバーBについて繰り返します。 問題はデータベースです。私のソフトウェアの各バージョンは、異なるバージョンのデータベースに対して実行する必要があります-だから私は一種の「スタック」です。 可能な解決策 私が検討している現在の解決策は、次のルールを採用しています: データベーステーブルを削除しないでください。 データベース列を削除しないでください。 データベース列の名前を変更しないでください。 列を並べ替えないでください。 すべてのストアドプロシージャはバージョン管理する必要があります。 意味-「spFindAllThings」は、編集時に「spFindAllThings_2」になります。 その後、再度編集すると「spFindAllThings_3」になります。 同じルールがビューに適用されます。 一方、これは少し極端に思えます-私はそれが問題を解決すると思います。アプリケーションの各バージョンは、中断することなくDBにヒットします。コードは、ビュー/ストアドプロシージャから特定の結果を予期します。これにより、その「契約」が有効になります。問題は、それがただずさんに染み込んでいるということです。アプリがしばらく展開された後、古いストアドプロシージャをクリーンアップできることは知っていますが、それは単に汚い感じです。また、これはこれらのルールに従っているすべての開発者に依存しますが、ほとんどの場合これは起こりますが、誰かが間違いを犯すと思います。 最後に-私の質問 これはずさんですか、それともハックですか? 他の誰かがこれをやっていますか? 他の人はこの問題をどのように解決していますか?

8
データベース内のデータを削除する必要がありますか?
私はデータベースが初めてで、基本的な概念を理解しようとしています。データベースのデータを削除する方法を学びました。しかし、私の友人の一人が、データベースのデータを削除してはいけないと言った。むしろ、不要になったら、単にマークするか、「使用していない」というフラグを立てることをお勧めします。 本当?もしそうなら、IBMのような大企業は100年以上にわたってどのようにデータを処理しますか?

7
すべてのDBテーブルで作成日と最終更新日フィールドを含めて標準化することは意味がありますか?
私の上司は現在、いくつかの開発標準をチームに適用しようとしているので、昨日、彼女が育てるまでほとんど順調だった標準について議論する会議がありました。 すべてのDBテーブルには、トリガーによって更新されるCreatedDateおよびLastUpdatedDate列があります。 この時点で、私たちのチームは意見の分裂に苦しみました。私たちの半分は、すべてのテーブルでこれを行うと、ほとんど利益のない大量の仕事だと思います(固定予算プロジェクトに取り組んでいるので、費用は会社の利益から得られます)。後半は、プロジェクトの支援に役立つと考えています。 私は元キャンプにしっかりといます。外部のケースによっては追加の列がサポート性を向上させることはありますが、私の意見では、最初に列を追加するために必要な作業量とメンテナンスにより、より多くの時間を費やすことになります単体テストや負荷テストなどの重要なこと。また、これらの余分な列によってORMを使用するのが難しくなることはかなり確信しています-私たちは主にC#とOracleを使用していることに注意してください。 したがって、私の質問は2つあります。 私は正しいキャンプにいますか?私は世界的に有名なデータベーススキルを持っているとは主張していません。そのため、これは副作用がなく、簡単に追加できるものです。 標準に関する会議がスラグマッチに移行する状況にどのように対処しますか?この基準が長期的には私たちを助けてくれないということを、どうすれば本当に売れますか?

6
単体テストとデータベース:どの時点で実際にデータベースに接続しますか?
データベースに接続するテストクラスの方法に関する質問への回答があります。たとえば、「テストクラスがサービスを接続する必要があります...」や「ユニットテスト-データベース結合アプリ」などです。 したがって、要するに、データベースに接続する必要があるクラスAがあると仮定しましょう。Aに実際に接続させる代わりに、Aに接続に使用できるインターフェースを提供します。テストのために、このインターフェイスをいくつかのもので実装します-もちろん接続しません。クラスBがAをインスタンス化する場合、「実際の」データベース接続をAに渡す必要があります。ただし、Bはデータベース接続を開きます。つまり、Bをテストするには、接続をBに挿入します。ただし、BはクラスCなどでインスタンス化されます。 したがって、どの時点で「ここでデータベースからデータをフェッチし、このコードの単体テストを作成しません」と言う必要がありますか? 言い換えると、あるクラスのコードのどこかで呼び出す必要がある、sqlDB.connect()またはそれに似たものです。このクラスをテストするにはどうすればよいですか? また、GUIまたはファイルシステムを処理する必要があるコードでも同じですか? ユニットテストをしたいです。他の種類のテストは私の質問とは関係ありません。私はそれで1つのクラスのみをテストすることを知っています(キリアンに同意します)。現在、一部のクラスはDBに接続する必要があります。このクラスをテストして「これを行うには」と尋ねると、多くの人が「依存性注入を使用してください!」と言います。しかし、それは問題を別のクラスにシフトするだけですよね?だから、本当に、本当に接続を確立するクラスをテストするにはどうすればいいですか? おまけの質問:ここでの答えは、「模擬オブジェクトを使用してください!」どういう意味ですか?テスト対象のクラスが依存するクラスをモックします。ここでテスト対象クラスをモックし、実際にモックをテストします(テンプレートメソッドを使用するという考え方に近づきます。以下を参照)。

3
データベースのテキスト列にvarcharを使用する理由はありますか?
あるvarcharだけで残りは以前からtext周囲に来た、またはあなたが考えケースが使用されたい使用するにはvarchar?(またはcharそのことについて..) (私は毎日PostgresとMySQL(MyISAM)を使用しているので、それらは私が最も興味を持っているものですが、他のデータベースへの回答はもちろん歓迎です。^ _-)

12
経験豊富なプログラマは、データベースクエリを知っている必要がありますか?[閉まっている]
クエリの作成とデータベース設計の専門家でもある非常に多くのプログラマーがいます。 これは、専門のプログラマーまたはソフトウェアエンジニアになるための必須要件でしょうか? 類似の多くは、クエリとコードが開発されている方法でありますが、私の個人的な意見は、あるクエリが異なる持っているように見える構造よりもコードを、異なるアプローチによる同時に両方をマスターするのは難しいことができます。
35 database  query 

6
開発者のラップトップに重要なデータベースを保存するための適切なセキュリティ対策は何ですか?
いくつかの指定があります。 開発者は、マシンに本番データベースのレプリカが必要です。 開発者は、App.configファイルで上記データベースへのパスワードを持っています。 このデータベースのデータが危険にさらされるのは望ましくありません。 いくつかの推奨される解決策とその欠点: フルディスク暗号化。これはすべての問題を解決しますが、ラップトップのパフォーマンスを低下させ、私たちは新興企業なので、パワーホースにお金をかけないでください。 暗号化されたハードディスクを使用してVMを作成し、その上にデータベースを保存します。これはうまく機能しますが、Web.Configにパスワードがあるため、あまり役に立ちません。 ソリューション番号2 +開発者が何かを実行するたびにデータベースパスワードを入力する必要がある。これはすべての問題を解決しますが、1分に数回アプリケーションを起動することがある開発者にとっては非常に面倒です。また、同じデータベースに接続する複数のアプリケーションがあり、パスワード画面の実装はそれぞれ異なる必要があります。 だから、私の問題は、そのような問題の一般的な解決策があるか、または上記の解決策のいずれかを実行可能にする方法に関する提案がありますか?

1
SQLiteデータベースの現実的で現実的な最大サイズとは何ですか?
SQLiteの適切な使用に関するこの記事によると、SQLiteは140テラバイトに制限されていますが、クライアント/サーバーRDBMSはより適切に動作する可能性があります。 SQLiteデータベースのサイズは、140テラバイト(2 47バイト、128ティビバイト)に制限されています。また、より大きなデータベースを処理できたとしても、SQLiteはデータベース全体を単一のディスクファイルに保存し、多くのファイルシステムはファイルの最大サイズをこれよりも小さいものに制限します。したがって、この規模のデータベースを検討している場合は、コンテンツを複数のディスクファイル、おそらく複数のボリュームに分散するクライアント/サーバーデータベースエンジンの使用を検討することをお勧めします。 一般的に、私はこれに同意しますが、SQLiteの最大制限が非常に高いことを知って驚いたのです!私の経験では、30〜100GBのサイズのSQL Serverデータベースをかなり使用しました。また、Oracle、Postgres、またはCassandraを使用して、はるかに大きなデータベースを間接的に操作しました。そのうち、少なくとも私の知る限り、140TBに近づいている人はいませんでした。私はDBAではないので、これは私の直接的な経験から「大」と考えるものです。 データベースが小さい場合にのみ、SQLiteを検討しました。最大で数十メガバイト。 この記事を読んだ後でも、数百ギガバイトを必要とするかもしれないもののためにSQLiteを検討することをまだ確信していません。しかし、その能力を過小評価していたのではないかと思っています。実際の使用でのSQLiteデータベースの現実的な最大サイズ制限とは何ですか?

6
アプリケーションごとに1つのデータベースを使用するか、複数のアプリケーション間で単一のデータベースを共有する必要があります[終了]
同じソースからのデータを使用するアプリケーションが複数あります。ベストプラクティス(または賛否両論)は次のとおりです。 複数のアプリケーションで共有されるデータベースにデータを残す 必要なデータベースは1つだけなのでスペースを節約できます アプリケーションごとにクエリのニーズが異なるため、インデックス作成が複雑になります データをアプリごとのデータベースに毎日インポートする 重複データがアプリごとのデータベースに存在するため、より多くのスペースを使用します 各アプリが個々のニーズに集中できるため、インデックス作成が簡単 他の長所/短所を省いたかもしれませんが、もしあれば、あなたの職場でどのようにこれを行っていますか?

3
プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?
Web開発者として、私はバイナリデータについてほとんど理解していません。 私は、「こんにちは。」の文章を取るバイナリに変換し、SQLデータベース内のバイナリとしてそれを保存する場合、思わ文字よりも多くのスペースを取るだろう、1と0のように。文字を使用することは、1つの記号が複数を表す圧縮を使用するようなものです。 しかし、それは本当にそれがどのように機能するのですか? プレーンテキストデータの保存は、同等のメッセージをバイナリで保存するよりもスペースを取りませんか?

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