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

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

2
スタースキーマとデータキューブの違いは?
私は、既存のリレーショナルデータベースシステムからデータキューブを作成する必要がある新しいプロジェクトに関与しています。 既存のシステムは適切に設計されていません。どこから始めればよいかわかりません。 私の質問は: スタースキーマとデータキューブの違いは何ですか? どこから始めなければなりませんか?スタースキーマからですか、それとも直接データキューブですか? データキューブはスタースキーマから生成されますか? リレーショナルデータモデリングの経験はほとんどありません。この質問は基本的なもののように思えるかもしれません。いくつかのリソースから理解しようとしましたが、まだ明確ではありません。アドバイスや提案をお願いします。 私がこの質問に関連して非常に重要な何かを見逃した場合は、それについてのあなたの考えも共有してください。

2
複数のタイプである可能性のある値を格納する最良の方法
より直接的かつ一般的な方法で質問を再質問したいと思います。 複数の異なるタイプの値を格納するテーブルをどのように作成しますか? 私の場合、値はイベントに関する診断を提供します。例:イベントが発生しました->イベントに関する関連情報を含む複数のPLCからの読み取り値を保存します。PLCは、あらゆるタイプのデータを監視できます。 私が考えることができるいくつかの例: 可能なすべてのタイプの列を作成し、使用する列を示す別の列を作成します 例:列:IntVal、StrVal、BoolVal、Type。値:null、null、True、「BOOL」 varcharとして値を保存します

2
主キーのないテーブルは正規化されていますか?
講義では、講師が主キーのないテーブルを見せてくれました。質問したところ、彼は3NFで推移的な依存関係を削除するときに、主キーのないテーブルがあっても問題ないと述べました。 ただし、主キーがないということは、機能上の依存関係がないことを意味しますが、3NFは推移的な依存関係の削除であり、すべての機能上の依存関係のため、各テーブルには正規化のための主キーが必要であると教えられました。 主キーなしでテーブルを作成することは完全に可能ですが、そのテーブルが存在する場合、そのデータベースは正規化されていると見なされますか? 追加する必要があります。テーブルには「一意のキー」、プライマリ、コンポジット、外部はありません。 表示されているテーブルには3つの属性があり、どれもプライマリまたは一意としてラベル付けされていません。私はそれが間違いかどうか尋ねました、そして彼はそれがなくても大丈夫だと言いました。この表の情報を一意に特定できないため、私はその発言に疑問を投げかけ、彼はこのようにしてよいと主張しました。これは私が正規化について教えられたことに反しています。

2
古いハックに対するSQL Serverのアドバイス[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 3年前休業。 夜の男とギャル、あなたの伝説のいくつかがここで私を助けることができるかもしれないことを願っています:) 私はSQL Serverをバージョン7で暗黒時代に最後に使用しました(2本の棒をこすって動かしました)。今、私は21世紀に入っており、再びDBAの仕事に戻りたいと思います。 「安価な」仮想マシンとインスタンスをセットアップして、最新の認定に向けて取り組みたいと思います(最新版は2017年4月に開始されると思います。これは私にとって良いタイミングだと思います)。私は特にBIの側面に興味があります。 誰でも仮想マシンの優れたホスティングプロバイダーを推奨できますか?Windowsサーバーを入手してそこから移動するのですか、それともどこかでパッケージを入手できますか?Azureは私が想定しているのですか、それとも他の場所ですか?私はいくつかのオプションがあると思います。いくつかの良いものを共有できることを願っています:) さらに、その他の役立つヒントは大歓迎です、乾杯!

4
第1正規形:明確な定義
第一正規形とは何かの決定版を取得しようとしています。私が読んだものはすべて、少し異なるスピンを持っています。 日付などの多くの当局は、定義によって関係は常に第1正規形であると言いますが、他の当局は要件のリストを提供します。つまり、1NFの要件は0から多くあります。 違いは、テーブルとリレーションの間の違いだと思います。テーブルは完全に混乱する可能性がありますが、リレーションシップは特定の制限に従います。したがって、リレーションがSQLでテーブルとして表されるという事実により、混乱が生じます。 SQLデータベースに関連するため、特に1NFに焦点を当てています。問題は、テーブルが最初の正規形であることを保証するために必要なプロパティは何ですか? 多くの当局は、表が関係を表す場合、それはすでに1NFにあると示唆しています。これにより、1NFの定義が関係の定義に戻ります。 1NFのテーブルのいくつかのプロパティは次のとおりです。 列の順序は重要ではありません[1] 行の順序は重要ではありません すべての行は同じ長さです(つまり、行データは列ヘッダーと一致します) 重複行はありません(これは代理主キーを使用して保証できますが、PK自体は必要ありません) 繰り返し列はありません 各列には単一の値(アトミック)が含まれています [1]技術的には属性は順序付けされていませんが、テーブルでは、行データは列ヘッダーと同じ順序である必要があります。ただし、実際の順序は重要ではありません。 上の複数のデータ: アトミックデータの概念は、アイテムをさらに分解することはできないということです。この概念は、技術的にはすべて吐き気を分解することができますが、問題のデータは、データの使用方法によっては、実際にはそれ以上分解できないという点で評価されています。 たとえば、通常、完全な住所または完全な名前はさらに分解する必要がありますが、名前や町の名前などのコンポーネントは、文字列として使用できるという事実にもかかわらず、おそらくこれ以上分解すべきではありません。 列を繰り返すように、それが持っている貧弱な設計カラムでほぼ等列、繰り返しphone1、phone2一般に等、繰り返されるデータは、追加の関連テーブルの必要性を示しています。 依存 同じヘッダーに準拠していることを除いて、行間に関係があってはなりません。 列の間にも関係があってはなりませんが、それがより高い正規形の主題であると私は信じています。 問題は次のとおりです。1NFの定義には上記のどれくらいが含まれていますか?独立した行ビットもそれに含まれますか?

1
テーブルに格納された階層内の階層的な権限
次のデータベース構造を想定します(必要に応じて変更可能)... ページと有効なアクセス許可を含む行を返すことができるように、特定のページで特定のユーザーの「有効なアクセス許可」を決定するための良い方法を探しています。 理想的なソリューションには、現在のユーザーの特定のページ行の「有効な権限」を評価するために必要な再帰を実行するためにCTEを使用する関数が含まれると考えています。 背景と実装の詳細 上記のスキーマは、コンテンツ管理システムの開始点を表しており、ロールにユーザーを追加したり、ロールからユーザーを削除したりすることで、ユーザーに権限を付与できます。 システム内のリソース(ページなど)はロールに関連付けられており、そのロールにリンクされたユーザーのグループに付与する権限を付与します。 すべてのロールを拒否し、ツリー内のルートレベルページをそのロールに追加して、ユーザーをそのロールに追加するだけで、ユーザーを簡単にロックダウンできるようにするという考え方です。 これにより、(たとえば)会社で働いている請負業者が長期間利用できない場合でも権限構造をそのままにしておくことができます。これにより、その1つのロールからユーザーを削除するだけで、元の権限を同じように付与することもできます。 。 アクセス許可は、これらのルールに従うことによってファイルシステムに適用される可能性がある一般的なACLタイプのルールに基づいています。 CRUD許可はヌル可能ビットにする必要があるため、使用可能な値はtrue、falseであり、以下の場合は定義されていません。 false +何か= false true +未定義= true true + true = true 未定義+未定義=未定義 いずれかの権限がfalseの場合-> false そうでない場合はtrue-> true その他(すべて未定義)-> false つまり、ロールメンバーシップを介して権限が付与され、拒否ルールが許可ルールをオーバーライドしない限り、何も許可されません。 これが適用される権限の「セット」は、現在のページまでのツリーに適用されるすべての権限です。つまり、このページのツリー内のページに適用されるロールにfalseがある場合、結果はfalseになります。ただし、ここまでのツリー全体が定義されていない場合、現在のページには真のルールが含まれ、結果はここでは真になりますが、親では偽になります。 可能な場合はdb構造を大まかに保持したいと思います。また、ここでの目標は次のようなことを実行できるようにすることです。select * from pages where effective permissions (read = true) and user = ?したがって、どのようなソリューションでも、有効なアクセス許可を持つクエリ可能なセットを許可する必要があります。何らかの方法で(基準を指定できる限り、それらを返すのはオプションです)。 2つのページが存在し、1つが他の子であり、2つの役割が存在すると仮定します。1つは管理ユーザー用で、もう1つは読み取り専用ユーザー用であり、どちらもルートレベルのページにのみリンクされ、期待どおりの出力として次のように表示されます。 Admin user: Id, Parent, …

1
友情データベース構造の設計:複数値列を使用する必要がありますか?
User_FriendList次の特性を持つと呼ばれるテーブルがあるとします。 CREATE TABLE User_FriendList ( ID ..., User_ID..., FriendList_IDs..., CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID) ); また、上記の表に次のデータが含まれているとします。 + ---- + --------- + --------------------------- + | ID | User_ID | Friendlist_IDs | + ---- + --------- + --------------------------- + | 1 | 102 | 2:15:66:35:26:17:| + ---- + --------- + --------------------------- + …

2
データウェアハウス:毎日のスナップショットを照会するにはどうすればよいですか?
時系列ではないデータベースのスナップショットがいくつかあります。例えば: スナップショット1日目: +----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+ スナップショット2日目(新しい投稿が今日追加されます): +----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld | 2015-01-01 | | 2 …

2
NoSQL:非構造化データとは何ですか?
現在、mssqlサーバーベースのソリューションを使用して、リソースのエッジで実行しています。 負荷に取り組むための次の動きに関する多くの従来のオプションがあります。 より高速なCPUとIOを購入する 一部の顧客を分割してサーバーを分離する クラスタにデータベースを移動 ライセンスとハードウェアまたは時間の点で、すべてが高価です。そこで、システム全体をnosqlエンジンのcassandraが約束するスケーラブルなソリューションに移動することで、別のオプションを追加したいと思います。 それでも、私は定かではなく、noSQLデータベースの経験もないので、「非構造化」データの構造を理解する必要があります。 このアプリケーションでは、基本的に、ユーザーがさまざまな方法で入力したデータを「Key-Value」リストとして保存します。(Orderのような)ヘッド要素を含む親テーブルがあり、(Order_Linesのような)注文の内容を構成するキーと値のペアを持つ子テーブルがあります。 ビジネス的には、OrderとOrderLinesは1つの単位です。ただし、RDBMSにより、これらはテーブルに格納され、常に結合する必要があります。 操作中に、上部のみをロードすることを選択する場合がありますが、ほとんどの場合、先頭行といくつかのKVPをロードして、いくつかの有用な情報を表示します。 たとえば、概要リストでは、ヘッド識別子といくつかの値を各行の列に表示します。 更新:あらゆる種類のフォームを保存します。したがって、基本的には「ドキュメント」を保存します。それにもかかわらず、これらのフォームを準備し、値、並べ替えなどで検索する必要があります。データアクセス制御により、データベースにもう1つの複雑なレイヤーが追加されます。 ご想像のとおり、特定のKVPの量と可用性はオブジェクトごとに異なります。さまざまなデータの組み合わせに対して数千のテーブルを作成する必要があるため、オブジェクトの種類ごとに単一のテーブルを作成する有効な可能性はありません。 この種の「辞書」のようなデータセットは、noSQLデータベースに格納する方が良いでしょうか?これによるパフォーマンス上のメリットはありますか?cassandraはこれらのhead + KVPを1つのデータセットとしてモデル化しますか?cassandraのWebページといくつかのチュートリアルを見ると、RDBMSとcassandraの間にデータ編成の点でそれほど大きな違いはないように思えます。5つのKVPを選択したい場合は、結合の数は同じです。各行のリスト。 啓蒙は歓迎されています、そして問題を説明する論文へのポインターも大丈夫です。

3
1つを除くすべての列を主キーとしてマークすることは妥当ですか?
映画を表すテーブルがあります。フィールドは次のとおり id (PK), title, genre, runtime, released_in, tags, origin, downloadsです。 重複する行によってデータベースを汚染することはできないため、一意性を強制したいと思います。問題は、異なる映画が同じタイトルを持つ可能性があることです、または同じフィールドを除くtagsとdownloads。一意性を強制する方法は? 私は2つの方法を考えました: downloads主キーを除くすべてのフィールドを作成します。downloadsそれはJSONであり、おそらくパフォーマンスに影響を与えるため、私は締め出します。 id主キーとしてのみ保持しますが、他のすべての列(再度、を除くdownloads)で一意制約を追加します。 よく似たこの質問を読みましたが、どうすればいいのかよくわかりませんでした。現在、このテーブルは他のテーブルとは関係ありませんが、将来的には関係する可能性があります。 現時点では20,000件弱のレコードですが、その数は増えると思います。これが問題にある程度関連しているかどうかはわかりません。 編集:私はスキーマを変更しました、そしてここに私がテーブルを作成する方法があります: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

1
大きく異なるキーを持つキーと値のペアのセットを効率的に格納する
さまざまな種類の活動をサイトに関連付けるアプリケーションを継承しました。アクティビティタイプはおよそ100種類あり、それぞれに3〜10個のフィールドの異なるセットがあります。ただし、すべてのアクティビティには、少なくとも1つの日付フィールド(日付、開始日、終了日、予定された開始日などの任意の組み合わせ)と、1つの担当者フィールドがあります。他のすべてのフィールドは大きく異なり、開始日フィールドは必ずしも「開始日」と呼ばれるわけではありません。 アクティビティタイプごとに1つのサブタイプテーブルを作成すると、スキーマが100の異なるサブタイプテーブルになり、扱いにくいので扱いにくくなります。この問題の現在の解決策は、アクティビティ値をキーと値のペアとして保存することです。これは、ポイントを理解するために、現在のシステムを大幅に簡略化したスキーマです。 各アクティビティには複数のActivityFieldsがあります。各サイトには複数のアクティビティがあり、SiteActivityDataテーブルには各SiteActivityのKVPが格納されます。 これにより、(Webベースの)アプリケーションのコーディングが非常に簡単になります。必要なのは、特定のアクティビティのSiteActivityDataのレコードをループし、各行のラベルと入力コントロールをフォームに追加することだけです。しかし、多くの問題があります: 整合性は悪いです。アクティビティタイプに属さないフィールドをSiteActivityDataに配置することは可能です。DataValueはvarcharフィールドであるため、数値と日付を常にキャストする必要があります。 このデータのレポートとアドホッククエリは難しく、エラーが発生しやすく、低速です。たとえば、指定された範囲内の終了日を持つ特定のタイプのすべてのアクティビティのリストを取得するには、ピボットとvarcharを日付にキャストする必要があります。レポートの執筆者たちはこのスキーマを憎んでおり、私は彼らを責めません。 だから私が探しているのは、レポートが簡単になるような方法で、共通のフィールドがほとんどない多数のアクティビティを保存する方法です。これまでに思いついたのは、XMLを使用して疑似非SQL形式でアクティビティデータを格納することです。 Activityテーブルには、各アクティビティのXSDが含まれるため、ActivityFieldテーブルは不要になります。SiteActivityにはキーと値のXMLが含まれるため、サイトの各アクティビティは1行に表示されます。 アクティビティは次のようになります(ただし、完全に具体化していません)。 <SomeActivityType> <SomeDateField type="StartDate">2000-01-01</SomeDateField> <AnotherDateField type="EndDate">2011-01-01</AnotherDateField> <EmployeeId type="ResponsiblePerson">1234</EmployeeId> <SomeTextField>blah blah</SomeTextField> ... 利点: XSDはXMLを検証し、データベースレベルで数値フィールドに文字列を入力するなどのエラーをキャッチします。これは、すべてをvarcharに格納していた古いスキーマでは不可能でした。 Webフォームの構築に使用されるKVPのレコードセットは、 select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r) XMLのxpathサブクエリを使用して、ピボットを使用せずに、開始日、終了日などの列を持つ結果セットを作成できます。 select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where... これは良い考えのように思えますか?このように多数の異なるプロパティセットを格納する他の方法は考えられません。既存のスキーマを保持し、データウェアハウスでクエリしやすいものに変換することも考えていましたが、スタースキーマを設計したことがなく、どこから始めればよいかわかりません。 追加の質問:XSDでを使用して日付データ型を持つタグを定義すると、xs:dateSQL Serverはそれを日付値としてインデックス付けしますか?日付でクエリを実行する場合、日付文字列を日付値にキャストし、インデックスを使用する可能性をなくす必要があるかどうか心配です。

4
変数エンティティをリレーショナルテーブルに変換する方法がわからない
はじめにおよび関連情報: 次の例は、私が直面している問題を示しています。 動物には人種があり、猫でも犬でもかまいません。猫はシャムまたはペルシャのいずれかです。犬はジャーマンシェパードまたはラブラドールレトリバーにすることができます。 動物は強力なエンティティですが、その人種は2つの提供された値(猫または犬)の1つを持つことができる属性です。 これらの値はどちらも複雑です(問題を説明するためにここでは犬/猫のタイプのみを追加しましたが、猫/犬の名前やその他の要素もある場合があります)。 問題: この例では、リレーショナルテーブルを作成する方法がわかりません。 問題を解決するための私の努力: 問題を表す陳の表記法を使用してERダイアグラムを描画しようとしましたが、初心者であるため、正しく行ったかどうかはわかりません。ここに私が持っているものがあります: 間違ったものを描いた場合はお詫び申し上げます。その場合は訂正してください。私は単に「無料のソリューション」を手に入れたいのではなく、将来この問題を自分で解決できるように対処する方法を学びたいと思っています。 頭に浮かぶのは、猫用と犬用の2つの別々のテーブルを作成することだけです。また、Animalテーブルの人種属性には、猫または犬の値のみが格納されます。このようなもの: Animal< # Animal_ID, race, other attributes > Cat < # Cat_ID, $ Animal_ID, breed > Dog < # Dog_ID, $ Animal_ID, breed > 私は自分の解決策について本当に気分が悪く、それが間違っているのではないかと心配しています。 質問: 私の例をどのようにしてER図に変換できますか? そのER図をリレーショナルテーブルに変換する方法は? さらに情報が必要な場合はコメントを残してください。できるだけ早く投稿を更新します。私はここでかなり新しいので、適切なタグを追加してください。 ありがとうございました。

3
ROWGUIDCOLとしてのPKまたは別のrowguid列を使用しますか?
ここで長い議論が続いているので、他の意見を聞きたいです。 uniqueidentifierがクラスター化されたPKを持つテーブルがたくさんあります。これが良いアイデアかどうかは、ここでは範囲外です(そして、すぐには変更されません)。 ここで、データベースをマージパブリッシュする必要があり、DEVは、既存のPKをROWGUIDCOLとしてマークするのではなく、個別のrowguid列の使用を推奨しています。 基本的に、彼らはアプリケーションが複製のみで使用されるものをドメインに持ち込むべきではないと述べています(それは彼らにとって「DBAのもの」だけです)。 パフォーマンスの観点からは、既存の列で実行できることを実行するために新しい列を追加する必要がある理由はわかりません。さらに、それは「DBAのもの」だけなので、DBAに選択させてみませんか? 私はDEVのポイントをある程度理解していますが、まだ同意しません。 考え? 編集:私はこの議論の中で少数派であり、私の立場に疑問を投げかけるDEVは私が尊敬し信頼する人々であることを追加したいだけです。これが私が意見を求めた理由です。 また、何かが欠けている可能性があり、その点を誤解している可能性があります。

2
子行の同じセットを持つ親行を見つける
次のような構造があるとします。 レシピ表 RecipeID Name Description RecipeIngredientsテーブル RecipeID IngredientID Quantity UOM 鍵はRecipeIngredientsです(RecipeID, IngredientID)。 重複するレシピを見つけるための良い方法は何ですか?複製レシピとは、各成分の成分と量がまったく同じであると定義されています。 FOR XML PATH成分を1つのカラムに組み合わせるために使用することを考えました。私はこれを完全に調査していませんが、成分/ UOM /数量が同じ順序で並べ替えられていて、適切なセパレーターがあることを確認すれば機能するはずです。より良いアプローチはありますか? 48Kのレシピと200Kの材料の行があります。

1
PostgreSQLはディスク上の新しいレコードを物理的にどのように配列しますか(主キーのクラスターの後)?
PostgreSQLがディスク上のレコードをどのように並べるかを知る必要があります。この場合、docsに記載されているインデックスの組み合わせを利用したいと思います。これは、ビットマップを使用して一致する行を取得し、物理的な場所に従ってそれらを返すことを理解しています。問題のテーブルは、主キーによってクラスター化されています。 私が理解しているように、PostgreSQLはクラスタリングが終了した後、自動的にクラスタリングを継続しません(ただし、特定のインデックスに従ってクラスタリングされたことを覚えています)。さて、これが主キーなので、物理的なストレージの順序はそれに従っているのでしょうか(これがtrueの場合は、特定のクエリに有利に使用したいと思います)。 要約すると、特にクラスタリングの後、PostgreSQLは新しいレコードをどのように順序付けますか? どうもありがとう!

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