質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

3回答

4948閲覧

データベース設計における正規化の方法

azuno_mix

総合スコア71

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

1クリップ

投稿2015/12/27 06:14

###前提・実現したいこと
Androidアプリ開発を学んでいる者です。

現在、おすすめの場所を提示してナビゲーションするアプリを開発しようと考えています。
そこで、事前に飲食店などの情報をSQLiteに格納しそのデータベースをアプリで読み込もうと考えていますが、
データベース設計に関しては入門書で少し触れた程度で、どのように正規化すればいいのかが分かりません。

主に管理したいデータとして以下の項目があります。

  • 店舗id
  • カテゴリー
  • 店舗名
  • 店舗説明
  • 予算
  • 店舗住所
  • 画像パス
  • 緯度
  • 経度

一つのテーブルとしてこれらを格納していいものなのでしょうか。
アドバイス頂けると嬉しいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

自分なら以下のようにします。

店舗テーブル

sql

1CREATE TABLE `shop` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', 3 `category_id` int(11) DEFAULT NULL COMMENT 'カテゴリーID', 4 `shop_name` varchar(64) DEFAULT NULL COMMENT '店舗名', 5 `shop_description` varchar(1000) DEFAULT NULL COMMENT '詳細', 6 `min_budget` int(11) DEFAULT NULL COMMENT '最低予算', 7 `city_code` int(5) DEFAULT NULL COMMENT '市町村コード', 8 `address` varchar(255) DEFAULT NULL COMMENT '住所', 9 `lat` float DEFAULT NULL COMMENT '緯度', 10 `lon` float DEFAULT NULL COMMENT '経度', 11 PRIMARY KEY (`id`) 12)

カテゴリーテーブル

sql

1CREATE TABLE `category` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', 3 `category_name` varchar(32) DEFAULT NULL COMMENT 'カテゴリー名', 4 PRIMARY KEY (`id`) 5)

画像テーブル

sql

1CREATE TABLE `image` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', 3 `shop_id` int(11) DEFAULT NULL COMMENT '店舗ID', 4 `path` varchar(255) DEFAULT NULL COMMENT '画像パス', 5 PRIMARY KEY (`id`) 6)

投稿2015/12/27 07:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuno_mix

2016/01/01 10:27

具体的に実際のコードでの例示とても参考になりました。 buibui80さんの言うとおり、SQLiteは少し型の扱いが違う部分があるようなので、その辺りを注意してテーブルを作成したいと思います。ありがとうございます。
guest

0

緯度、軽度から最寄の駅からの徒歩約何分みたいな情報を取得できるのでしょうか?
イタリアン兼フレンチってお店があるので、カテゴリーは店舗id, カテゴリーid をprimary key にする別テーブルに、
予算もランチとディナーで別に持っていた方がよさそうです。
画像については他の人も書いている通り。
そのお店のURLがあれば載せたいし、おすすめメニュー、オーナーシェフがいたら本人の名前や写真も欲しいとか、いろいろありそうです。

投稿2015/12/27 10:51

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuno_mix

2016/01/01 10:30

緯度経度情報から、APIにて移動時間予測が出来るようなので、それを利用したいと考えています。 予算の件や、カテゴリー分類の件などのアプリ仕様に関するアドバイスとても参考になりました。それらも考慮したデーテベースを設計したいと思います。 ありがとうございます。
guest

0

データ量や今後の拡張性・メンテナンス性によるのではないでしょうか?

例えば、今後1店舗に対して複数画像を用意したくなった場合を考えて、
あらかじめ画像テーブルに切り分けて画像パスを店舗ID毎に紐つけておけば多数の画像でも管理しやすくなります。

カテゴリー名などマスター的なデータの場合も別テーブルに切り分けて、
店舗テーブルではカテゴリーIDだけを登録しておけば
あとでカテゴリー名をちょこっと変更する場合にカテゴリーテーブルだけ変更すれば
全店舗へ反映されるのでメンテナンスもしやすくなります。

データ量が少なくて今後の変更もない場合はテーブル分けしないでも良いかと思います。

投稿2015/12/27 06:32

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuno_mix

2016/01/01 10:23

画像の複数枚管理の方法など、メンテナンス性を考慮したアドバイスありがとうございます。とても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問