ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Microsoft Visual Studio 2015 と SQL Server データベースファイルで開発する「目からうろこ」の C# プログラミングによる成績処理システム(4) – Microsoft Visual Studio 2015 によるテーブル作成

leave a comment »

1.テーブルの作成

VisualStudio_成績処理_040_mid_640

前回までに Visual Studio の新しいプロジェクトを開始し、SQL Server データベースファイルを作成した。今回は SQL Server データベースファイルにテーブルを作成する。

Visual Studio の「SQL Server オブジェクトエクスプローラー」で SQL Server データベースファイルを展開すると「テーブル」が表示されるが、データベースファイルを作成した直後にはユーザーテーブルがなく、「システムテーブル」というフォルダだけが表示されている。これは SQL Server データベースファイル自体が利用するテーブルで、通常は中身を見ることがない。ユーザーが利用するテーブルを作成するには、「テーブル」フォルダを右クリックし「新しいテーブルの追加」を行う。

VisualStudio_成績処理_041_mid_640

Visual Studio の「SQL Server オブジェクトエクスプローラー」で「テーブル」フォルダを右クリックし「新しいテーブルの追加」を行うと、このようにテーブルのデザインビューが表示される。画面の左上にはデフォルトで「名前」、「データ型」、「Nullを許容」、「規定」の要素がある。これらを設定しながらテーブルの構造を決めていく。

2.生徒基本情報を保存するテーブルを作成する

まず生徒の氏名など基本情報を保存するテーブルを作成する。成績処理に必要な項目は何かを考えながらフィールドを決めていく。ここでは次のようなフィールドを作成することにした。

・seitoID 生徒番号 文字列型(6) 主キー
・sei 姓 ユニコード可変長文字列型(50)
・mei 名 ユニコード可変長文字列型(50)
・nen 学年 整数型
・class クラス名 1バイト可変長文字列型(3)
・num 出席番号 整数型
・sex 性別 ユニコード文字型
・birthday 生年月日 日付型
・nyunen 入学年度 整数型
・state 在籍状態 整数型

3.フィールド定義の考え方

ひとりの生徒に対して一意の「生徒番号」を与え、生徒個人にひとつの要素をフィールドとして用意する。姓、名、などだ。性別、生年月日、入学年度なども生徒ごとに決まった不変の値をとる。

学年、クラス、出席番号は、年度ごとに値が変わるフィールドになる。これは別テーブルにして年度ごとのデータを集積しなければならないが、生徒データにも現在の状態を記録することが望ましい。学年やクラスでデータを選択することが多いからだ。同様に、場合によっては姓、名も在学中に変わるケースがある。これも別テーブルで管理しなければならないが、現在の姓、名は生徒基本上でわかるようにしておきたい。これは厳密には「正規化」の概念に反することになる。データベース関係の書籍にはテーブル構造を考えるときに「正規化」をしなさい、と書かれているが、硬直的に正規化すると実際のデータ運用上クエリが複雑になるなど問題がおこる。このあたりは、ある程度データベース運用の経験を積むとわかってくる。「正規化」の考え方を理解した上で、実際にどこまで正規化をするかは、どのような処理をしたいのかを念頭におきながら設計していく。

4.データの型の考え方

次にデータの「型」をどうするかを考える。数値なのか文字なのか、コード化するかしないかは難しい選択だ。データベースは表計算ソフトなどでの集計と違い、それぞれのフィールドはデータの「型」を決めなけらばならない。

合計や平均を計算する必要があるデータは数値とする。たとえば出席日数や欠席時間数、成績といった項目だ。だが数字に見えても文字列型として処理することが望ましい場合もある。ゼロで始まるような数字、たとえば電話番号は数値型としては最初のゼロを記録することができなくなるため文字列型にする。学籍番号もゼロで始まる番号が与えられる可能性があれば、文字列型にする。

コード化するかどうかも選択が難しい。たとえば性別をコード化し、男は「1」、女は「2」とすることは考えがちだが、性別は多くの帳票で表示されるため、性別をコード化すると多くのクエリでテーブルの追加または表示のためのコードが必要となってしまう。漢字ならデータは2バイト、コードなら1バイトとデータ量は異なるが、「男」、「女」とデータを作っておくことが運用上望ましい。正確に分類集計したいとき、コード化しなければデータの統一性が失われる危険がある場合はコード化する。この例では「在籍状態」をコード化することにした。在籍状態は、通常を「1」、休学を「2」、転出を「3」、退学を「4」、卒業を「5」のように決める。コード化することにより、成績処理などでは在籍状態=1、在籍生徒数をカウントするときは在籍状態>=2、卒業生を集計するときは在籍状態<=5のようにして選択できる。ここを日本語で管理すると、「転出」を「転学」と記録してしまうなどデータの統一性が失われてしまう。

5.テーブルの作成

VisualStudio_成績処理_042_mid_640

テーブルのデザインビューで、既定で最初に「Id」という名前、データ型が「int」のフィールドがあり、そこには鍵のアイコンがついている。これは「主キー」である印だ。これを、フィールド名を「seitoID」に、データ型を「char(6)」に変更する。そして続くフィールドも設定していく。

VisualStudio_成績処理_043_mid_640

フィールドの名前、データ型などを決めたら、最後に「Nullを許容」のチェックを全部外そう。

VisualStudio_成績処理_044_mid_640

「Null」を許容にしておくと、データを登録しなくてもよいフィールドとなり、処理のときに例外が発生する可能性がある。もし何らかの事情で、一時的に「Null」データのまま処理したいケースが出てくる場合はチェックしたままにするが、後のことを考えると「Null」は許容しない方がよいだろう。

6.テーブル生成の SQL 文

フィールドを決めていくと、デザインビューの下の「T-SQL」のところに、CREATE TABLE ではじまるテーブルを定義する SQL 文ができあがっていくのがわかる。データベースにテーブルを作成する操作はこの SQL 文によってされるが、このようなテーブルの構造や構成を定義するために用いられる SQL 文を DDL(Data Definition Language)といい、データを操作する SQL 文である DML(Data Manipulation Language)、データへのアクセス権限などを制御する SQL 文であるDCL(Data Control Language)と区別される。

VisualStudio_成績処理_045_mid_640

SQL 文では CREATE TABLE [dbo].[Table] となっていることがわかる。これは「Table」という名前のテーブルを生成する、という意味だ。テーブル名は「Seito」としたいので、SQL 文の最初の行を CREATE TABLE [dbo].[Seito] のように変更する。

VisualStudio_成績処理_046_mid_640

SQL 文の最初の行を CREATE TABLE [dbo].[Seito] に変更した。

VisualStudio_成績処理_047_mid_640

7.SQL 文の保存

作った SQL 文は実行する前に選択して右クリックで「コピー」すると保存することができる。後でテーブル構造を見直したいときなど、SQL 文をコピーしておくと作業のやりなおしがしやすい。

VisualStudio_成績処理_047_mid_640

コピーした SQL 文はメモ帳などに貼り付けて一括管理しておくといい。

VisualStudio_成績処理_048_mid_640

8.データベースの更新でテーブルを作成する

VisualStudio_成績処理_049_mid_640

テーブル構造が決定したら、テーブルのデザインビューの上部にある上向きの矢印「更新」でデータベースの更新をする。

VisualStudio_成績処理_050_mid_640

「データベース更新のプレビュー」ウィンドウが表示されるので「データベースの更新」ボタンをクリックして更新する。これでデータベースに SQL 文が実行され、テーブルが生成する。このとき「スクリプトの生成」ボタンをクリックすると、テーブル生成の DDL 文、CREATE TABLE 文をファイルに保存することもできる。

VisualStudio_成績処理_052_mid_640

データベースの更新が正常に実行できたら、テーブルのデザインビューの下にある「データツール操作」ウィンドウに更新の手順が示される。

VisualStudio_成績処理_053_mid_640

テーブルができたら「SQL Server オブジェクトエクスプローラー」で確認する。ビューを最新の状態に更新すると、「テーブル」フォルダの配下に「dbo.Seito」テーブルができており、テーブル名を展開するとフィールドが列挙される。

次回はこのテーブルに生徒基本情報を保存しよう。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。