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

10
区切りリストをデータベース列に保存するのは本当に悪いことですか?
チェックボックスのセットがあるWebフォームを想像してみてください(それらのいずれかまたはすべてを選択できます)。データベーステーブルの1つの列に格納されている値のコンマ区切りリストに保存することにしました。 今、私は正しい解決策が2番目のテーブルを作成し、データベースを適切に正規化することであることを知っています。簡単なソリューションを実装する方が迅速であり、あまりにも多くの時間を費やすことなく、そのアプリケーションの概念実証を迅速にしたかったのです。 私の状況では、節約された時間とより単純なコードはそれだけの価値があると思いました。これは防御可能な設計の選択ですか、それとも最初から正規化する必要がありますか? これは、共有フォルダに保存されたExcelファイルを実質的に置き換える小さな内部アプリケーションです。また、プログラムをクリーンアップして、より保守しやすくすることを考えているので、私も尋ねています。完全に満足しているわけではないことがいくつかあります。そのうちの1つはこの質問のトピックです。

4
データベースの標準形式とは何ですか?例を挙げられますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 リレーショナルデータベースの設計には、データベースの正規化または単に正規化という概念があります。これは、列(属性)とテーブル(関係)を編成して、データの冗長性を減らし、データの整合性を向上させるプロセスです。(ウィキペディアに書かれているように)。 ほとんどの記事はやや技術的で理解が難しいため、1NF、2NF、3NF、さらには3.5NF(Boyce-Codd)の意味についての例に基づいて、理解しやすい説明を書いてほしいと思っています。

11
初めてのデータベース設計:私はオーバーエンジニアリングしていますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する バックグラウンド 私はCSの1年生で、父親の中小企業でアルバイトをしています。実世界でのアプリケーション開発の経験はありません。私はPythonでスクリプトを書き、Cでいくつかのコースワークを書いていますが、このようなものはありません。 私のお父さんは小規模なトレーニング事業を行っており、現在すべてのクラスがスケジュールされ、記録され、外部のWebアプリケーションを介してフォローアップされています。エクスポート/「レポート」機能がありますが、それは非常に一般的であり、特定のレポートが必要です。クエリを実行するために実際のデータベースにアクセスすることはできません。カスタムレポートシステムを設定するように求められました。 私の考えは、一般的なCSVエクスポートを作成し、オフィスでホストされているMySQLデータベースに(おそらくPythonで)毎晩インポートし、そこから必要な特定のクエリを実行できるようにすることです。私はデータベースの経験はありませんが、基本を理解しています。データベースの作成と通常のフォームについて少し読みました。 国際的なクライアントがすぐに始まる可能性があるので、それが発生した場合にデータベースが爆発しないようにしてください。現在、クライアントとしていくつかの大企業があり、部門が異なります(例:ACME親会社、ACMEヘルスケア部門、ACMEボディケア部門)。 私が思いついたスキーマは次のとおりです: クライアントの観点から: クライアントはメインテーブルです クライアントは彼らが働いている部門にリンクされています 部門は国中に散らばっています。ロンドンの人事、スウォンジーのマーケティングなどです。 部門は会社の部門にリンクされています 部門は親会社にリンクされています クラスの観点から: セッションはメインテーブルです 教師は各セッションにリンクされています statusidは各セッションに与えられます。例0-完了、1-キャンセル セッションは、任意のサイズの「パック」にグループ化されます 各パックはクライアントに割り当てられています スキーマを「落書き」のように「設計」し、3番目の形式に正規化するようにしました。私は、MySQLのワークベンチにそれを差し込むと、それはかなり私のためにすべてをした:(フルサイズのグラフィックはこちら) (ソース:maian.org) 実行するクエリの例 クレジットが残っているクライアントは非アクティブです(将来的にクラスがスケジュールされていないクライアント) クライアント/部門/部門ごとの出席率はどのくらいですか(各セッションのステータスIDで測定) 教師が1か月に行った授業の数 出席率の低いクライアントにフラグを立てる 部門の出席率を示す人事部門のカスタムレポート 質問 これは過剰設計ですか、それとも正しい方向に進んでいますか? ほとんどのクエリで複数のテーブルを結合する必要があるため、パフォーマンスに大きな影響がありますか? おそらく一般的なクエリになるので、クライアントに「lastsession」列を追加しました。これは良い考えですか、それともデータベースを厳密に正規化しておくべきですか? 御時間ありがとうございます

26
データベースの1対1の関係を使用することが理にかなっている時期はありますか?
先日、正規化について考えていましたが、データベースに1対1の関係があるはずがないと思いました。 Name:SSN?同じテーブルに入れます。 PersonID:AddressID?繰り返しますが、同じテーブルです。 1対多または多対多の適切な中間テーブルを使用して、膨大な数の例を思い付くことができますが、1対1になることはありません。 私は何か明白なものを見逃していますか?

6
3NFとBCNFの違いを簡単な言葉で(8歳まで説明できる必要がある)
見積もりを読みました。 データはキー[1NF]、キー全体[2NF]に依存し、キー[3NF]にのみ依存しています。 しかし、3.5NFまたはBCNFと呼ばれているとおりに理解できません。これが私が理解していることです: BCNFは3NFよりも厳しい テーブル内のFDの左側はスーパーキー(または少なくとも候補キー)である必要があります では、なぜ、いくつかの3NFテーブルがBCNFにないのでしょうか。つまり、3NFの引用は「キー以外には何もない」と明示的に述べており、すべての属性が主キーにのみ依存していることを意味します。主キーは、結局のところ、主キーとして選択されるまでの候補キーです。 これまでの私の理解に関して何か問題があれば、私を訂正してください。あなたが提供できるあらゆる助けに感謝します。

13
Facebookデータベース設計?
私はFacebookがどのようにして友達<->ユーザー関係を設計したのかといつも疑問に思っていました。 ユーザーテーブルは次のようなものだと思います。 user_email PK user_id PK password ユーザーのデータ(性別、年齢など、私が想定するユーザーの電子メールを介して接続されている)を表に示します。 すべての友達をこのユーザーにどのように接続しますか? このようなもの? user_id friend_id_1 friend_id_2 friend_id_3 friend_id_N おそらく違います。ユーザー数は不明で拡大するため。

4
MYSQL 5.7のネイティブJSONサポート:MYSQLのJSONデータ型の長所と短所は何ですか?
MySQL 5.7では、MySQLテーブルにJSONデータを格納するための新しいデータ型が追加されました。それは明らかにMySQLの大きな変化になるでしょう。彼らはいくつかの利点を挙げました ドキュメントの検証 -有効なJSONドキュメントのみをJSON列に格納できるため、データの自動検証を取得できます。 効率的なアクセス -さらに重要なことに、JSONドキュメントをJSON列に格納すると、プレーンテキスト値として格納されません。代わりに、オブジェクトメンバーと配列要素にすばやくアクセスできるようにする最適化されたバイナリ形式で保存されます。 パフォーマンス -JSON列内の値にインデックスを作成することにより、クエリのパフォーマンスを向上させます。これは、仮想列の「機能インデックス」で実現できます。 利便性 -JSON列の追加のインライン構文により、SQL内にドキュメントクエリを統合することが非常に自然になります。例(features.featureはJSON列です):SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254; うわー !彼らはいくつかの素晴らしい機能が含まれています。データの操作が簡単になりました。より複雑なデータを列に格納できるようになりました。したがって、MySQLはNoSQLでフレーバーされています。 JSONデータのクエリは次のようになります。 SELECT * FROM t1 WHERE JSON_EXTRACT(data,"$.series") IN ( SELECT JSON_EXTRACT(data,"$.inverted") FROM t1 | {"series": 3, "inverted": 8} WHERE JSON_EXTRACT(data,"$.inverted")<4 ); それで、いくつかのjsonカラムに巨大な小さな関係を保存できますか?いいですか?それは正規化を壊しますか?これが可能であれば、MySQLカラムではNoSQLのように動作すると思います。この機能についてもっと知りたいです。MySQL JSONデータ型の長所と短所。

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