C# SQL データベース:Tim Corey のレッスンを通じた深掘り
C# アプリケーション開発の世界では、SQL データベースを扱うことは学ぶべき最も重要なスキルの一つです。 Tim Corey はビデオ"C# アプリ開始から完了 レッスン 08 – SQL データベース設計"で、リレーショナルデータベースの設計、テーブル作成、リレーションシップの定義、ストアドプロシージャの書き方を詳述しています。
この記事では、Tim のレッスンをより深く見て、彼が示すようにそのアイデアを正確に説明していきます。 C# アプリケーションが SQL Server に接続する方法の理解を深め、データベースを正しく構築する方法について興味がある場合、Tim のビデオは優れたガイドです。
データベース設計の紹介
1:00 で、Tim は視聴者に、データベーススクリプトを含むすべてのスクリプトとファイルがパッケージに含まれることを思い出させます。彼は、1つのレッスンで完全な SQL Server の専門家になるのではなく、設計を理解し、データの構造について考える方法を理解することが目標であることを強調します。 その後、Tim は直接データベースダイアグラムに移ります。
データベースダイアグラムの理解
1:52 で、Tim はチームメンバーテーブルに着目し、それが人の名前や姓を直接保存していないことを説明します。 その代わりに、People テーブルにリンクする Person ID を保存しています。 これはリレーショナルデータベースにおける1対多の関係の例であり、一人の人が複数のチームに所属することができます。
Tim は実際の例を挙げます。複数のトーナメントが同時に開催される場合、一人の人が複数のチームに所属するかもしれません。 これにより重複が避けられ、主キーを使用することでデータを効率的にクエリすることができる方法を示しています。 Tim は重複データは矛盾した情報(例えば一貫性のないメールアドレス)を生み出すため有害であることを強調します。
彼は、設計アプローチとして、完全な重複データを保存するのではなく、IDを使用することを説明します。 これは優れた SQL Server データベース設計の基盤です。
重複列を避ける
4:48 で、Tim は別々の列に複数のメールアドレス(Email2 や Email3)を保存することを避けるべき理由について話します。代わりに、Person ID と Email Address 列を含む別のメールアドレステーブルを作成することを提案します。 これにより、一人の人が複数のメールアドレスを持つことができるようになり、People テーブルを複雑にせずに済みます。
Tim は、データベース設計がシンプルさと柔軟さのバランスをとるものであると説明します。 このチュートリアルでは、彼は設計をクリーンかつ実用的に保つために、1つのメールと1つの電話番号のみを保存することに決定します。
SQL Server Management Studio でのデータベース作成
6:44 で、Tim は SQL Server Management Studio に切り替え、SQL Server 2016 Developer Edition を使用していることを説明します。このエディションは無料であり、Enterprise Edition と同じ機能を備えています。 彼は、本番環境では使用できませんが、ローカルマシンでの開発には最適であると指摘します。
Tim は SQL Server データベースを作成する2つの方法を説明します:SSMS ダイアログを通じて、または SQL クエリを使用して。 彼はクエリ方式を好みます。それはより速いからです。 彼が使用するコマンドは以下の通りです:
create database tournaments;彼は、セミコロンが重要であり、すべての SQL 文の最後に使用されるべきであると説明します。 データベースを作成した後、Tim は SSMS ウィンドウをリフレッシュして、新しいデータベースが表示されるようにする方法を紹介します。
テーブルの表示とテーブル設計
12:06 で、Tim はすでにスクリプトを使用してすべてのテーブルを作成したことを言及します。次にSSMSでテーブルデザイナーを開く方法を示します。 Tim は、C# 開発者にとって SQL スクリプトが恐れるものであり、デザイナーは SQL 文法を暗記することなく視覚的にテーブルを編集するのに役立つと説明します。
Tim は Prizes テーブルを例に使用しています。 彼は、主キーを設定する方法、データ型を選択する方法、null 値を管理する方法を説明します。 また、主キーが SQL のテーブルストレージと取得を最適化するのに役立つことに注意しています。 主キーがなければ、SQL は"ヒープ"を作成し、クエリが遅くなるとしています。
ID の自動インクリメント
15:36 で、Tim は ID 列を Identity Specification を使用して自動インクリメントする方法を説明します。 彼はインクリメントとシードを1に設定します。Tim は、これが各行にユニークな識別子を与え、SQL がデータを効率的にソートするのに役立つことを強調しています。
彼は、このアプローチが最小限の労力で非常に最適化された設計を提供し、複雑なチューニングなしに堅実な SQL Server データベースを望む C# 開発者に最適であると指摘しています。
データ型の理解
18:09 で、Tim は異なる SQL 文字列タイプの varchar、nvarchar、および nvarchar(max) を説明します。 彼は以下のように説明します:
Char: 文字を格納
Var: 変数長 (最大数まで)
- N: 国際文字向けの Unicode サポート
Tim は、nvarchar がより多くのストレージを使用しますが、グローバルな言語をサポートするのに対して、varchar が英語のみのテキストに理想的であると説明しています。 さらに、nvarchar(max) は非常に大きな文字列、たとえばアプリケーションで保存して後で取得する JSON 用に使用されることを説明します。
マネーと浮動小数点データ型
24:00、Tim は SQL データ型を C# の型と比較します。彼は通貨の値に money を使用し(C# の decimal に類似)、パーセンテージには float を使用します(double に類似)。 これは C# 開発者が SQL 型とそのプログラミング型を一致させるのに役立ちます。
テーブル関係
25:04 で、Tim は外部キーを使用して関係を作成する方法をデモします。 彼はリレーションシップエディターを開いて、主テーブルが実際の ID を含み、外部テーブルがその ID を参照することを説明します。
また、親レコードが削除されたときに自動的に関連レコードを削除するカスケード削除のアイデアを説明します。 Tim は、ID を不変として扱うべきであり、一度作成されたら変更しないことを注意します。
新しいテーブルの作成
29:30 で、Tim は SSMS エディターを使用して新しいテーブルを作成する方法をデモします。 彼は以下のような列を持つテスト用の個人テーブルを構築します:
名
名字
メールアドレス
電話番号
子供の数
- 作成日
Tim は、デフォルトの値を設定する方法を示し、子供の数を0に設定し、現在の時刻を設定するために getdate() を使用します。タイムゾーンにまたがるアプリケーションには getutcdate() がより良いと説明します。
テーブル内のデータ編集
39:39 で、Tim は SSMS で行を直接編集する方法を示します。 彼はサンプルレコードを追加し、エラーによって挿入が失敗した場合でも ID 値が消費されることを説明します。 彼は SQL に自動インクリメントのシーケンスを続けるようにして、欠けている ID については心配しないようにアドバイスします。
基本的な SQL クエリ
44:23 で、Tim は基本的なクエリ構文を教えています:
SELECT * FROM table
WHERE
LIKE
ORDER BY
- 列別名を使って AS
彼は、SELECT * は学習には良いが、実際のアプリケーションでは性能と明確さのために列を指定するべきであると述べています。
ストアドプロシージャ
50:33 で、Tim はストアドプロシージャを導入します。 彼はストアドプロシージャがデータベースロジックに安全にアクセスし、SQL インジェクション攻撃を防ぐことができると説明します。 Tim は、直接的なテーブルアクセスやビューよりもストアドプロシージャを好みます。それはより良いセキュリティを提供するからです。
彼はトーナメント ID で賞金を取得するストアドプロシージャを作成する方法を示します。 彼はパラメータ、BEGIN と END のブロック、NOCOUNT ON ステートメントを説明します。
ストアドプロシージャの実行
58:04 で、Tim は苗字でテスト用の人物を取得するためのストアドプロシージャを作成し、それを使用して実行する方法を示します:
EXEC dbo.SP_TestPerson_GetByLastName 'Corey'彼は dbo スキーマがデフォルトであり、SQL Server はプロシージャ名に対して大文字小文字を区別しないことを説明しています。
最終的な考え
Tim は彼のビデオで、SQL データベース設計は複雑に見えるかもしれませんが、基本的な概念はシンプルであると結論付けています。 彼は視聴者に実践と探索を勧め、次のレッスンでデータベースを C# コードに接続することを予告します。

