「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:1
総数:1509
現在:5


時間割が作れない

ページOpenOffice.org FAQの登録ページ
投稿者kay
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2008-05-19 20:29:26 (月)
OSwindow xp
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

初めてのデータベースで困っています。 FAQも適切なキーワードが分からず泣きそうです。

t_lesson

date_id  lsn1  lsn2  lsn3   lsn4
--------------------------------
5/10    3       8     4      6
5/11    2       6            3
5/12    1             7
5/13    4                    3
5/14            7     7


t_names

l_id   nation
--------------
1      england
2      france
3      russia
4      thai
5      vietnam

[目的]
この2つの表から、t_lessonの形のままで、数字を対応するt_namesに置き換えるqueryを作りたいのですが、出来ません。

<求める形>

5/10 russia  spain thai china
5/11 france  china 
5/12 ....

[状況]
queryでt_lessonを元にt_namesを4つ作り、t_lessonのlsn1からlsn4用に4つのfieldにt_namesのl_idとを結合してnationを4つ分表示できるようにしました。
queryを実行すると、すべてのfieldが埋まった行のみが表示されるので、右結合をしてみたり、右に変えたり、試しましたが、求める形となりません。
結果は、とんでもない列の表示がなされたりで、何故か良く分かりません。

同じ性質のfieldを作っているのがまずいと思っているのですが...。正規化が分かっていないのか....。 多対多とかと関係ありそうなのですが、分かりません。

[質問]
どこが間違えているのか、ぜひともご教授方お願いします。
(あるいは、ヒントとなるキーワードを...)

   kay


時間割が作れないの補足修正

kay (2008-05-19 21:03:34 (月))

t_lessonテーブルのフィールドは、 date_id, lsn1, lsn2, lsn3, lsn4の4つです。データは、5/10から始まり、3番、8番、4番、6番と入っています。次のレコードは、5/11から始まり、2番、6番、....。

他方、t_namesの名前テーブルは、l_idとnationの2つのフィールドからなります。例としてのデータは、1がengland,2がfrance、3がrussiaなどとしています。

目的は、t_lessonのn番の所をt_namesの表から引いてきて、置き換えたテーブルを作ると言う単純なものです。

求める表は、5/10、 3→russia、8→spain、などと置き換えたデータ行を5/11、5/12と下の方に順番に並べるというものです。

よろしくお願いいたします。

とりあえず

M.Kamataki (2008-05-19 21:11:05 (月))

メッセージの内容の整形したのと、補足のために作成されたページに追加されたメッセージをこちらの回答欄に移動しました。#1029は不要となったの削除しました。

できました

M.Kamataki (2008-05-19 23:15:44 (月))

サンプル filefaq4_1028_1.odb

ポイントは下図のように"t_names"を名前を変えてクエリーに登録することです。テーブルを登録する際、同じテーブルを追加すると自動的に名前が変わります。そのそれぞれのテーブルと"t_lesson"テーブルとで、"l_id"フィールドとそれぞれに対応する"lsn[1-4]"フィールド間をリレーションします。こうすれば1つのクエリーで実現できます。

faq4_1028_1.png

ポイントは

M.Kamataki (2008-05-19 23:31:52 (月))

テーブルのほうかな。"t_names"テーブルには新たに"non"にあたるID"9"を追加、もちろん"t_lesson"テーブルのブランクだった部分には"9"を入力しています。

テーブル設計に関して

tani (2008-05-20 11:00:48 (火))

鎌瀧さんの回答でいけてるみたいなので蛇足ですが、気になったので。
素直にt_lessonをみると、

t_lesson

date  lsn_time  lsn_id
--------------------------------
5/10    lsn1    3
5/10     lsn2    8
5/10     lsn3    4
5/10     lsn4    6
5/11    lsn1    2
5/11     lsn2    6
5/11     lsn4    3


こんな感じにデータを蓄積するのが普通かなと思いました。
ついでにlsn_timeもマスタデータ化しておくといい感じ
じゃないでしょうか。

テーブルの( )入力がポイント?

kay (2008-05-20 15:29:31 (火))

鎌瀧さん、早速の回答を有難うございました。

1.結論的には、無入力のセルがポイントであり、nulの扱いが分かっていない人は、特定な値(nonなど)を決めて他の入力値と同様な挙動をするようにして対処すべきと理解しました。

どのように空欄が影響するのかは勉強したいと思います。

2.taniさんの書いていただいたテーブル設計の辺りが、分かっておらずもやもやしていて、設計のまずさが、おかしくなる原因かと思ってしまいました。

この項目から外れそうなのですが、date lsn_time lsn_idでも、ローテーションが定まっているのでlan_timeのlsn1、lsn2、lsn3などと入れるのも同じように冗長に思えるのですが、そのほうが「普通」なのでしょうか?

あと、「lsn_timeのマスター化」がどのようなことか教えていただければ幸いです。
初心者にも丁寧に有難うございました。

無題

tani (2008-05-20 17:47:46 (火))

> 「lsn_timeのマスター化」

と書いたのは、単に、

> lsn1、lsn2、lsn3などと入れるのも同じように冗長

なので、t_namesなどと同じように授業時間枠(?)を定義したテーブルを
別途用意してt_lessonにはその時間枠idのみをデータとして保持しておば
良いのではという意味です。

こんな感じで頻繁に挿入・変更・削除されるデータ類が
入ったテーブル(t_lesson)とあまり更新されないテーブル(t_names)
を区別して後者をマスタテーブルと呼んだりします。
(ちょっと適当な説明ですが。。。元の私の文章が省略しすぎですね。)

ぼんやり分かってきました

kay (2008-05-20 20:59:22 (火))

taniさん、有難うございました。

お二方の説明を参考に、逆の変換モデルで試してみました。
[表一]
一行目.. あい..うえお.. か..きくけ
二行目.. こ....さし....すせ... そ

これを
[表二]
1... あい
2... うえお
3... か
などから次のように逆に番号に振りなおすものです。
一行目..1..2...3..4
二行目....

結果的には、教わった通りで出来たのですが、少し入力ミスをすると、2つの表の直交が出てくるのですね。

ミス対策をすれば実用化出来そうな感じになってきました。
有難うございました。取り急ぎお礼まで。

完了にします

M.Kamataki (2008-05-21 10:09:11 (水))

当初の質問については解決していますので完了にします。また、ご質問がありましたら新たに登録してください。

お名前:
題名:


添付ファイル: filefaq4_1028_1.png 582件 [詳細] filefaq4_1028_1.odb 1419件 [詳細]