AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
データベース【データベースとテーブル】
前回はいきなり「みんなでめもめも」というツールを作ってしまいましたが、少しずつデータベースについて考えていきたいと思います。データベースは、テーブルの集まり、と言えます(実際にはもう少し煩雑ですが)。テーブルは1つの表データのようなものと考えて下さい。これが1つ又は複数集まって1つのデータベースとなります。エクセルでのシートはテーブル、ブックをデータベース、という感じでしょうか。

 
Borland Paradox(BDE)でスタンドアロン型のデータベースプログラムを作成する場合は、各テーブルが別々のファイル(拡張子.DB)として扱うようになっていますが、Firebird や Interbase では、1つのデータベースファイルとして扱う事になり、各テーブルはその中に一緒に入っています。Firebird の場合、ファイル名の拡張子は通常「.FDB」となります。Interbase では「.IB」となっています。
 
ごく単純なデータベースの場合、テーブルは1つで十分、という場合がありますが、複数に分けた方が扱いやすいという場合もあります。それは便宜に応じて作成されると良いと思います。例えば、「住所録」のデータベースを作成する場合、
名前住所TEL

のようなテーブル1つだけで十分という場合はあります。が、住所を入力する際に〒から検索したい、というような場合は、郵便番号の辞書(郵便番号テーブル)を別に用意して、それを検索するようにしたいかもしれません。また、コンボボックス一覧で「北海道」「青森県」…「鹿児島県」「沖縄県」から選択したいという場合は、都道府県データ(都道府県テーブル)を別に作成しておいて、それを利用する、というような事をしたいかもしれません。そうなるとテーブルは複数になっていきます。
 
横の並び=列を「フィールド」、縦の並び=行を「レコード」と呼びます。
 
こういうデータベースを作りたい=こういうテーブルを作りたい、という事が決まったら、次に、テーブルの項目内容を決めます。決めるのは、項目名(フィールド名)、型(データタイプ)、型が文字の場合には最大文字数も必要です。項目名は英大文字・数字だけで作成するのが無難です。小文字も使う場合には、項目名を扱う際に項目名を二重引用符(")で囲う必要が出てきます。そうしないと大文字小文字が同じであると扱われて非常にややこしい事になる可能性があります。ですので英大文字にしておくのが無難です。全角文字は使えません。また、予約語も使えません。バージョンによって若干変わってきますが全部使わないようにするのが無難です。
Firebird、Interbaseでの予約語
ACTION ACTIVE ADD ADMIN AFTER ALL ALTER AND ANY AS ASC ASCENDING AT AUTO AUTODDL AVG BASED BASENAME BASE_NAME BEFORE BEGIN BETWEEN BLOB BLOBEDIT BOOLEAN BUFFER BY CACHE CASCADE CAST CHAR CHARACTER CHARACTER_LENGTH CHAR_LENGTH CHECK CHECK_POINT_LEN CHECK_POINT_LENGTH COLLATE COLLATION COLUMN COMMIT COMMITTED COMPILETIME COMPUTED CLOSE CONDITIONAL CONNECT CONSTRAINT CONTAINING CONTINUE COUNT CREATE CSTRING CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURSOR DATABASE DATE DAY DB_KEY DEBUG DEC DECIMAL DECLARE DEFAULT DELETE DESC DESCENDING DESCRIBE DESCRIPTOR DISCONNECT DISPLAY DISTINCT DO DOMAIN DOUBLE DROP ECHO EDIT ELSE END ENTRY_POINT ESCAPE EVENT EXCEPTION EXECUTE EXISTS EXIT EXTERN EXTERNAL EXTRACT FALSE FETCH FILE FLOAT FOR FOREIGN FOUND FREE_IT FROM FULL FUNCTION GDSCODE GENERATOR GEN_ID GLOBAL GOTO GRANT GROUP GROUP_COMMIT_WAIT GROUP_COMMIT_WAIT_TIME HAVING HELP HOUR IF IMMEDIATE IN INACTIVE INDEX INDICATOR INIT INNER INPUT INPUT_TYPE INSERT INT INTEGER INTO IS ISOLATION ISQL JOIN KEY LC_MESSAGES LC_TYPE LEFT LENGTH LEV LEVEL LIKE LOGFILE LOG_BUFFER_SIZE LOG_BUF_SIZE LONG MANUAL MAX MAXIMUM MAXIMUM_SEGMENT MAX_SEGMENT MERGE MESSAGE MIN MINIMUM MINUTE MODULE_NAME MONTH NAMES NATIONAL NATURAL NCHAR NO NOAUTO NOT NULL NUMERIC NUM_LOG_BUFS NUM_LOG_BUFFERS OCTET_LENGTH OF ON ONLY OPEN OPTION OR ORDER OUTER OUTPUT OUTPUT_TYPE OVERFLOW PAGE PAGELENGTH PAGES PAGE_SIZE PARAMETER PASSWORD PERCENT PLAN POSITION POST_EVENT PRECISION PREPARE PRESERVE PROCEDURE PROTECTED PRIMARY PRIVILEGES PUBLIC QUIT RAW_PARTITIONS RDB$DB_KEY READ REAL RECORD_VERSION REFERENCES RELEASE RESERV RESERVING RESTRICT RETAIN RETURN RETURNING_VALUES RETURNS REVOKE RIGHT ROLE ROLLBACK ROWS RUNTIME SCHEMA SECOND SEGMENT SELECT SET SHADOW SHARED SHELL SHOW SINGULAR SIZE SMALLINT SNAPSHOT SOME SORT SQLCODE SQLERROR SQLWARNING STABILITY STARTING STARTS STATEMENT STATIC STATISTICS SUB_TYPE SUM SUSPEND TABLE TEMPORARY TERMINATOR THEN TIES TIME TIMESTAMP TO TRANSACTION TRANSLATE TRANSLATION TRIGGER RIM TRUE TYPE UNCOMMITTED UNION UNIQUE UNKNOWN UPDATE UPPER USER USING VALUE VALUES VARCHAR VARIABLE VARYING VERSION VIEW WAIT WEEKDAY WHEN WHENEVER WHERE WHILE WITH WORK WRITE YEAR YEARDAY
Firebird 1.0:
CURRENT_USER CURRENT_ROLE BREAK DESCRIPTOR
FIRST RECREATE SKIP SUBSTRING
Firebird 1.5:
CURRENT_CONNECTION CURRENT_TRANSACTION
BIGINT CASE RELEASE ROW_COUNT
SAVEPOINT
----- Added as non-reserved words:
COALESCE DELETING INSERTING LAST
LEAVE LOCK NULLIF NULLS
STATEMENT UPDATING USING
----- Moved from reserved words to non-reserved:
BREAK DESCRIPTOR FIRST SKIP
SUBSTRING
Firebird 2.0:
BIT_LENGTH BOTH CHAR_LENGTH CHARACTER_LENGTH
CLOSE CROSS FETCH LEADING
LOWER OCTET_LENGTH OPEN ROWS
TRAILING TRIM
----- Moved from non-reserved words to reserved:
USING
----- Added as non-reserved words:
BACKUP BLOCK COLLATION COMMENT
DIFFERENCE IIF NEXT SCALAR_ARRAY
SEQUENCE RESTART RETURNING
----- Moved from reserved words to non-reserved:
ACTION CASCADE FREE_IT RESTRICT
ROLE TYPE WEEKDAY YEARDAY
----- Removed reserved words:
BASENAME CACHE CHECK_POINT_LEN
GROUP_COMMIT_WAIT LOGFILE LOG_BUF_SIZE
NUM_LOG_BUFS RAW_PARTITIONS
こういった事で簡単にエラーしてしまう場合もありますので注意して下さい。それをふまえた上で、項目内容を下記のようにしたりします。
内容フィールド名最大文字数
番号N整数
名前ANAME文字列半角16文字
ZIP文字列半角8文字
住所ADDR文字列半角80文字
TELTEL文字列半角14文字
最初に番号を付けるようにしていますが、これは、その行データ(レコードデータ)を識別させるために付けておいた方がいい、という私自身の経験によります。1から順番に1,2,3,……と付けるようにして、他の行(レコード)と重複しないようにします。
型(データタイプ)は、ここでは文字列ばかりですが、もっと色々なものもあります。私自身は、SMALLINT(小さい整数)、INTEGER(大きい整数)、FLOAT(単精度の実数)、DOUBLE PRECISION(倍精度の実数)、VARCHAR(文字列)しか使いません。
〒は「XXX-XXXX」という記入方法で合計8文字。プログラムの都合上、「XXXXXXX」と「-」を外して7文字にするのも良いですし、ZIP1・3文字、ZIP2・4文字と分けるのも良いです。TELは「XXXX-XXXX-XXXX」であると考えて合計14文字としています。住所は半角80文字としていますが足りないかもしれません。なお、文字列内容には、半角の引用符(')、二重引用符(")を使用しないようにするのが無難です。
 
Firebird は 標準SQL-99準拠との事ですから、そちらの書籍等を参考にされると良いと思います。
 
 
都道府県テーブルを作成して利用する場合は、例えば、下記のような2つのテーブルを考えたりします。
都道府県テーブル
内容フィールド名
番号TNSMALLINT
都道府県名TNAMEVARCHAR(8)
住所録テーブル
内容フィールド名
番号NINTEGER
名前ANAMEVARCHAR(16)
ZIPVARCHAR(8)
都道府県番号TNSMALLINT
住所ADDRVARCHAR(80)
TELTELVARCHAR(14)
 
都道府県は47しかありませんので SMALLINT で十分間に合います。あとで追加するかもしれない事を考えて、ある程度の余裕を持った方が良い場合もありますが、その分、データが大きくなっていきますので適度にした方が良いです。
後で(大きく)変更する事も出来ますが、どこに影響してくるかも分からないので(例えば印刷の場合、印刷枠からはみ出るかも?等)最初の決定は結構重要になってきます。
 
ここで、都道府県テーブルのTNと、住所録テーブルのTNで、2つのテーブルは関連付けられる事になります。SQLでは、これによって2つのテーブルを1つのテーブルのように表示したりする事も出来ます。これを、リレーショナル・データベース(RDB)と呼びます。
 
プログラム上、都道府県番号から都道府県名を参照して表示するようにして、住所の方には都道府県名を書かない、という事が出来ます。都道府県名を入力しなくて良い、という事は、その分、省力化となります。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
 A B C D
 E F G H
 I J K L
 M N O P
 Q R S T
 U V W X
 Y Z
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.