データベースの階層化について

550 views
Skip to first unread message

ゆう

unread,
Dec 1, 2012, 10:21:39 AM12/1/12
to android-g...@googlegroups.com
お世話になっております。現在学生でandroidアプリ開発を行っている、ゆうと申します。

学生の情報を管理するアプリケーションの開発を考えております。
構想は以下のとおりです。()は例です。

教室の名前と、その教室にいる学生の人数を入力し、SQLiteデータベースに登録する。(1-1教室 : 40人 と登録)
登録した教室がリスト表示される。(1-1 , 1-2 , ....)
リストから教室を選択すると、設定した人数分のリストが表示される。(40個の空リストが表示される)
表示されたリストを選択し、学生の名前、住所を登録する。(1. 山田太郎 : 東京都○○  2. 空リスト 3. ....)

分かりにくい説明で申し訳ございません。

教室、人数が親データ
学生の名前、住所が子データ
として階層データベースとして開発したいと考えているのですが、色々と調べてみても事例が見つかりませんでした。
SQLiteデータベースの階層化は可能でしょうか?

可能でしたら、参考資料やアドバイス等があれば宜しくお願いいたします。
不可能でしたら、実現できるための案等を挙げてくださると嬉しいです。

Hirokazu Fukami

unread,
Dec 1, 2012, 10:28:23 AM12/1/12
to android-g...@googlegroups.com
こんばんはfkmです。

テーブルを2つ作ればいい という話では?
参考になるのは、初心者向けのAccessの本とかかもしれません。

# 階層データベースと聞いて、前職のメインフレームのお仕事を思い出してしまいました

2012/12/2 ゆう <i08310....@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/caQVQEw-x3kJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

ゆう

unread,
Dec 1, 2012, 10:49:29 AM12/1/12
to android-g...@googlegroups.com
fkm  さん。
早急なご返信ありがとうございます。
テーブルを二つ作成して、そのテーブル間の関連付けはどのように行えばよいのでしょうか?

知識不足で申し訳ございません…。


Hirokazu Fukami

unread,
Dec 1, 2012, 11:04:18 AM12/1/12
to android-g...@googlegroups.com
こんばんはfkmです。

まずはSQLiteを使うのではなく、「ファイル」を使う場合を考えてみてはどうでしょうか?
どうしてもSQLiteを使いたいというのであれば、まずはリレーショナルデータベース(RDB)に関して
学ぶことをおすすめします。

2012/12/2 ゆう <i08310....@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/9ps8L8fSPGgJ

ssももんが

unread,
Dec 1, 2012, 7:54:43 PM12/1/12
to android-g...@googlegroups.com
ももんがです。

結論から言えば、考えられているようなテーブル設計は可能です。

fkmさんの仰る通り、まずはRDBについて学んだ方が良いと思います。
まず、外部キー辺りを調べて見ればヒントになるかも知れません。
ただし、AndroidのSQLiteでは外部キーが使えなかった気がします。
また、今回の要件の場合、ファイルを使うよりもDBを使ったほうが理想的と思います。





2012年12月2日 1:04 Hirokazu Fukami <fkm...@gmail.com>:

Yoshida Kenichi

unread,
Dec 1, 2012, 8:47:29 PM12/1/12
to android-g...@googlegroups.com
吉田@ECCコン専です。
ちょうど学生3チームが、Android-SQLite, VB.Net-MySQL,
VB.net-Accessで似たようなことをしているのでヒントをお伝えしましょう(卒業制作なので、こういった論理設計はとっくに済んでますががー)。

SQLiteのようなRDBと呼ばれるデータベースは階層構造を表す場合、データ同士の関連を用います。
テーブルそのものは1つの事象(=エンティティ:教室とか学生とか)に対して説明できるデータ(属性)を格納するようにします。
階層構造は、関連付けを示すテーブル(ここでは教室所属表)を用意する場合が多いです。
以下に、簡単な論理設計を示しますので、SQL文で実装するなどしながら勉強されてはどうでしょう。
わりと典型的な設計です(40人を教室が持つ入室可能な人数の属性としてみました)

ヒント(論理設計ぽい部分)のみ入れておきます。
=======以下ヒントです
[教室表]1 対 多[教室所属表]多 対 1[学生表]

教室表(主キー:教室ID)
教室ID,教室名,最大人数
1-1,1階第1教室,40
1-2,1階第2教室,40
主キー:教室IDは他の行(教室データ)とかぶらないようにする

学生表(主キー:学生ID)
学生ID, 学生名, 住所
201201,山田太郎,東京都○○
201202,山下次郎,東京都××
201203,山本三郎,東京都△△
主キー:学生IDは他の行(学生データ)とかぶらないようにする。学籍番号等を使うといいかも

教室所属表(主キー:教室ID,学生ID)
教室ID,学生ID
1-1,201201 …1階第1教室に山田太郎が所属
1-1,201203 …1階第1教室に山本三郎が所属
1-2,201202 …1階第2教室に山下次郎が所属
主キー:教室IDと学生IDの組み合わせは他の行とかぶらないようにする
外部キー
教室IDは教室表にあるものしか使わない(存在する教室のみ)
学生IDは学生表にある者しか使わない(存在する学生のみ)
=======以上ヒントでした

物理設計実装(SQL文)では3つの表はCREATE TABLE文で作成します。
3つの表のデータは各々INSERT文で追加していきます。

CREATE TABLEで表を作成する際に以下のキーワードで定義できますが、特に記述しなくても構いません(と言い切ってしまいます)。
主キーをPRIMARY KEY
外部キーをFOREIGN KEY

あと、AndroidのSQLiteは外部キーが実装されていません。
(確認するとAndroid 4.2で外部キーが有効になったようです。)

プロトタイプ作成時には外部キーを気にせず作るといいと思います。
目視で確認できるデータ数ならば、目で見て表に存在するデータのみ使うようにして開発をはじめます。。

以上、参考になるでしょうか。
RDBシステムについて全くの素人ですと、何を書いているのか分からないかもしれません。
そうでしたら逆にとっかかりにして、何とか形にしてみてください(^-^)


2012年12月2日 9:54 ssももんが <ss.mo...@gmail.com>:
Message has been deleted

飯塚康至

unread,
Dec 2, 2012, 9:04:15 PM12/2/12
to android-g...@googlegroups.com
お疲れ様です。飯塚です。下記参考まで。
http://dotinstall.com/lessons/basic_sqlite

2012年12月2日 22:16 HyperLand 和 <snow...@gmail.com>:
> 無料会員登録が必要ですが、DB設計を勉強するなら以下のITProのページは結構分かりやすいですよ。
> http://itpro.nikkeibp.co.jp/article/COLUMN/20070226/263243/
>
> 一旦Excelなどの表ソフトでテーブルイメージ(表化)を書いて見るといいかもしれませんね。
> プライマリキーとテーブル間の繋がりを意識して設計すれば、それなりの物はできます。
>
> 以下はAccessですが、アプリ作成には役立つのではないでしょうか。
> http://www.mahoutsukaino.com/ac/access2007/04_db3/01.htm
>
> ただ、個人情報はデータの取り扱いに注意してくださいね。
>
> ではでは。
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/6Qd1Wbs0DtwJ
> にアクセスしてください。
>
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
以上、宜しくお願いします。

飯塚 康至

ゆう

unread,
Mar 26, 2013, 8:06:39 AM3/26/13
to android-g...@googlegroups.com
ご返信が遅れまして申し訳ございません。

ご親切なアドバイスを下さった皆様、心から感謝致します。
ありがとうございました。


さて、本題ですが、
Javaプログラミング及びMySQLデータベースに詳しい友人との相談の末、
ArrayListでのデータ保存に試みました。

現段階ではデータの永続化は出来ていないです。
ArrayListとSQLiteとの紐付けを今後の課題として挙げております。

今後もプログラミングに勤しむ次第でございます。
またわからないことがございましたら、質問させていただきます。

重ね重ね申し上げます。
ありがとうございました。
今後ともよろしくお願い致します。
Reply all
Reply to author
Forward
0 new messages