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

概念スキーマおよび/または論理モデルおよび/またはデータベースの物理設定の開発。


4
複式簿記データベースの設計
私は会計ソフトウェアを作成しています。複式簿記を実施する必要があります。トランザクションごとに1行と2行の古典的な問題があります。 例を挙げて、両方のシナリオでどのように実装されるかを見てみましょう。 account Cashとaccountを検討してくださいRent。毎月の家賃を支払うと、Cashアカウントから100ドルを口座に振り替えRentます。 トランザクションごとに1行 1行システムでは、このようなトランザクションは次のように保存されます。 取引 tx_id | posting_date 1 | 23/05/2015 transaction_records id | tx_id | credit_account | debit_account | amount 1 | 1 | Cash | Rent | 100.00 トランザクションごとに2行 2行のシステムでは、同じトランザクションレコードをミラーリングして反対のレコードを作成し、両方を合計すると、残高がゼロになります。 取引 tx_id | posting_date 1 | 23/05/2015 transaction_records id | tx_id | type | account | …

6
データベース設計書の必要性[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 去年閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 私はデータベースを設計していますが、テーブル間に非常に多くの関係があり、データベースの設計を非常によく教える本が必要です。

2
MAXテキストまたはより具体的で小さいタイプの使用
彼らが見たとき、誰かが私が使用して見て、提案されたテーブルを作成するための私のDDLコードをレビューしてたVARCHAR(256)私がすべきことを、私は最初の名前または何のような、かなり小さいことが予想されるテキストのフィールドを常にだけ使用VARCHAR(MAX)し、リンクを使用する理由は何もなく、varchar型(最大)。私はそれを読みましたが、2005年に焦点を当てていたため、日付があり、すべてのテキストフィールドで1行あたり最大2GBを割り当てる可能性を実際に正当化するようには思われませんでした。 パフォーマンス、ストレージなどの観点から、VARCHAR(MAX)最新バージョンのSQL Serverで使用するか、より小さな特定のタイプを使用するかを決定するにはどうすればよいですか?(例:2008、2012、2014)

3
特権のある子供と1対多の関係を築く方法は?
各親について、1人または0人の子供が「お気に入り」としてマークされる1対多の関係が必要です。ただし、すべての親が子供を持つわけではありません。(このサイトでは、両親を質問、子供を回答、お気に入りを受け入れられた回答と考えてください。)たとえば、 TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id 私の見方では、TableAに次の列を追加できます。 FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id または、TableBの次の列: IsFavorite BIT NOT NULL 最初のアプローチの問題は、null許容の外部キーを導入することです。これは、正規化された形式ではないことを理解しています。2番目のアプローチの問題は、多くても1人の子供がお気に入りであることを確認するために、より多くの作業を行う必要があるということです。 どのアプローチを使用するかを決定するには、どのような基準を使用する必要がありますか?または、私が検討していない他のアプローチはありますか? SQL Server 2012を使用しています。

3
国際データベースの照合を選択する方法は?
さまざまな言語(UTF-8を使用)でデータを格納するデータベースを設計しているので、クエリの結果を表示する最良の方法は、クエリ自体の実行中にユーザーの言語に従って並べることです(複数あるためそれを行う正しい方法)、次のように: SELECT a < b COLLATE "de_DE" FROM test1; これが国際データを処理する正しい方法であると仮定すると、データベース自体にとって最適な照合はどれですか?PostgreSQLのドキュメントによると: C照合とPOSIX照合はどちらも「従来のC」動作を指定します。この動作では、ASCII文字「A」から「Z」のみが文字として扱われ、ソートは文字コードバイト値によって厳密に行われます。 この場合、これが最良の選択だと思いますか、それとも間違っていますか? (ボーナス質問:クエリ自体で照合順序を選択するには遅すぎますか?)。

5
ビューを参照する外部キー(ベーステーブルだけでなく)を許可するDBMSはありますか?
Djangoモデリングの質問に触発されました:Djangoの複数の多対多リレーションを使用したデータベースモデリング。db-designは次のようなものです。 CREATE TABLE Book ( BookID INT NOT NULL , BookTitle VARCHAR(200) NOT NULL , PRIMARY KEY (BookID) ) ; CREATE TABLE Tag ( TagID INT NOT NULL , TagName VARCHAR(50) NOT NULL , PRIMARY KEY (TagID) ) ; CREATE TABLE BookTag ( BookID INT NOT NULL , TagID INT …

2
非dboスキーマと新しいデータベースをいつ使用するかの決定基準
私はほとんどがアプリケーション開発者ですが、現在のプロジェクト(MS SQL Server 2008の場合)のために、すべての事前データベース作業をしなければならないことに気付いています。最初の決定として、別のデータベースを使用して状態を分割するか、同じデータベース内の別のスキーマを使用するかを判断しようとしています。私はSQL Serverスキーマを少し読みましたが、オブジェクトドメイン(私は好きです)を分離する自然な方法のように思えますが、このパターンに隠れたコストがあるかどうかはわかりません。 これら2つのアプローチを選択する際に考慮すべき、より実用的なものは何ですか?dbo.mytableを支持しない場合、アーキテクチャにmyschema.mytable他の課題(または問題)を作成しますか? 補足として...ある時点で、これは実際の DBAに引き継がれ、保守/サポートされるので、私は彼らの生活を困難にしないように努めています。

8
教授は、リレーショナルテーブルを定義する代わりに、シリアル化されたJavaオブジェクトをblobとして保存するように指示しました
私の教授は、正しい属性でテーブルを実際に定義する代わりに、次のようにオブジェクトをIDにマップできると言っています。 id (int) | Serialized Object (blob) 1 10010110110 これには多くの問題があります。データの冗長性、IDを個別に追跡する必要があり、テーブル全体をメモリにプルして何かを検索する必要があり、** Javaコードでモデルを変更したい場合は、そのモデルにデータベース。 私はそのモデルに永遠にこだわっているか、モデルを変更するために他の本当にいことをしなければなりません。私は教授に反対することを正当化しますか?私が考えていないことをこれを行うにはいくつかの利点がありますか?私が正しいなら、これについて私の教授に何か言うべきですか?彼はこれを私のクラス全体に説教し、プロジェクトをそのように構築したとさえ言っていました。セカンドオピニオンは素晴らしいでしょう。 コースの名前はSoftware Designです。 私の教授は、これが最良の方法であるとは言いませんでしたが、リレーショナルテーブルを定義するための正当な代替手段であると言いました。 モデルは決して動的ではありません。

5
データベースにユニットを保存する最良の方法
何かの量を表す数百の列を持つ大規模な(SQLServer)データベースを継承しました。これらの値の単位(「ガロン」、「インチ」など)は、拡張プロパティのMS_Descriptionフィールドに格納されます。この情報を保存するより良い方法があるかどうか疑問に思っています。ドキュメンテーションの目的には適していると思いますが、このデータに基づいて堅牢な単位変換計算を行うことは困難です。この時点で、私は侵襲的な変更を行う準備ができていませんが、そうする機会を得た場合、この点で推奨されるベストプラクティスは何ですか?私の頭の上のオプションには、次のものがあります。 列名を含まれる単位に変更します(例: "TotalVolumeInGallons"。これにより、情報が少し入手しやすくなりますが、それでも私には弱いようです。) すべての「金額」列に対応する個別の「単位」列を追加します(この列はnvarcharであるか、単位変換の計算を容易にする個別の単位テーブルへの外部キーである可能性があります。多くの列は、データベースのサイズをかなり2倍にする可能性があります-ひどく冗長なデータです。) ユニット専用の拡張プロパティで新しいフィールドを作成します。(残念ながら、これがUnitsテーブルの外部キーになるとは思わない。) 私が見落としている別のアイデアはありますか? 更新: @Todd Everettの答えを読んだ後、考えられる解決策が思いついたので、先に進んで自分の質問に答えます。(下記参照)


1
CAP定理の背後にある理由は何ですか?
http://en.wikipedia.org/wiki/CAP_theorem http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf 私はそれが非常に簡単理由はないと思う2つだけの 一貫性 可用性 パーティション許容差 任意の分散データベースシステムを保持できます。この推測は証明されましたが、おそらくこれが成立する理由を簡単に確認する方法はありますか? 証明を探しているのではなく、この定理が理にかなっている理由を理解する良い方法を探しています。理由は何ですか?

6
データベースの設計とプロトタイプを作成するための優れたツールはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 すべてのテーブル、列、データ型、およびリレーションを含むデータベーススキーマを設計するための優れたツールが必要です。今日、私は主にペンと紙でこれを行いますが、良いデザインツールでやりたいです。 優れた(そしておそらく無料の)データベース設計ツールはありますか?

12
コードではなくデータベースに制約が適用されるのはなぜですか?
データベースに制約が適用されるのはなぜですか?それをコードに入れることはより柔軟ではないでしょうか? データベースの実装に関する初心者向けの本を読んでいるので、これを初心者として尋ねています。このエンティティモデルを含むデータベースを設計したとしましょう。 entity type | sub-types ----------------+-------------------------------------------- Person | Employee, Student, ... Student | Graduate, Undergraduate, ... Employee | Teacher, Administrator, ... 現在の制約: システムの登録者は、学生または従業員のみです。 個人エンティティには社会的番号の一意性が必要です。これは、すべての個人が一意の一意の名前(別名、十分に優れた主キー)のみを保持していることを前提としています。(#1を参照) 後で番号1を削除することにしました。ある日、大学がTeacher(Employeeサブタイプ)もStudent自由時間でコースを取ると決定した場合、数千、数百万、数十億のデータベース設計を変更するのははるかに困難です。コードのロジックを変更するだけでなく、数十億のエントリ:学生と従業員の両方として個人を登録することを許可しなかった部分のみ。 (ありそうもないことですが、今のところ他に何も考えられません。 どうやらそれは可能です)。 コードではなくデータベース設計でビジネスルールを重視するのはなぜですか? #1:7年後のメモ、実際の例: 私は、ミスのために発行されたSSNが複製された政府を見ました:複数の人々、同じSSN。元のDBの設計者は、この一意性制約をデータベースに適用しないという間違いを間違いなく犯しました。(そして元のアプリケーションのバグ?共有データベースを使用している複数のアプリケーションが制約をどこに置き、チェックし、強制することに同意しませんか?...)。 このバグは、今後何年もの間、システムとその後に開発されたすべてのシステムで存続し、元のシステムのデータベースに依存します。ここで答えを読んで、可能な限り多くの制約をデータベースに賢明に(盲目的にではなく)適用して、現実の物理的な世界をできるだけうまく表現することを学びました。

3
varchar(255)またはvarchar(256)?
テーブルを使用する必要がありますvarchar(255)かvarchar(256)?列の長さ、またはメタデータの保存に1バイトが使用されていると聞きました。 この時点でそれはもう重要ですか? 私はインターネット上でいくつかの投稿を見ましたが、それらはOracleとMySQLに適用されます。 Microsoft SQL Server 2016 Enterprise Editionがありますが、この環境にどのように適用されますか? ここで、たとえば、テキストの説明を256ではなく255文字に保つようにクライアントに指示した場合、違いはありますか?私が読んだこと「DBMSは255文字の最大長で、フィールド内のデータの長さを示すために単一バイトを使用することを選択できます。制限が256以上の場合、2バイトが必要になります。」これは本当ですか?

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