MySQL Version 5.1.41
このジャンルでお願いします。
例えば地名を格納する
テーブル「area」
+------+-------+
| id | name |
+------+-------+
| 1 | 渋谷1丁目|
+------+-------+
| 2 | 渋谷2丁目|
+------+-------+
があったとします。
次にその上位?(これらの丁目を包括する)データが必要なった場合に
新たにテーブルを作ってその外部キーをテーブル「area」に新たに追加する方法が良いのでしょうか?
テーブル「grouparea」
+------+-------+
| id | name |
+------+-------+
| 1 | 渋谷区|
+------+-------+
テーブル「area」←このテーブルの列構造をその都度変える
+----+---------------+-----------+
| id | grouparea_id | name |
+-----+-------------+-----------+
| 1 | 1 | 渋谷1丁目|
+-----+-------------+-----------+
| 2 | 1 | 渋谷2丁目|
+-----+-------------+-----------+
でもこれだとさらにその上位概念のエリア「東京」や「東京」は
「関東」、あるいは「東日本」といった具合に追加したくなった場合に、
順番的に「grouparea」テーブルの先に「ken」テーブルを追加してて
後に「grouparea」テーブルを追加したくなったら
テーブル「ken」
+------+-------+
| id | name |
+------+-------+
| 1 | 東京都|
+------+-------+
テーブル「area」
+----+---------------+-----------+
| id | ken_id | name |
+-----+-------------+-----------+
| 1 | 1 | 渋谷1丁目|
+-----+-------------+-----------+
| 2 | 1 | 渋谷2丁目|
+-----+-------------+-----------+
次に「grouparea」テーブルを追加したくなったら
テーブル「ken」
+------+-------+
| id | name |
+------+-------+
| 1 | 東京都|
+------+-------+
テーブル「grouparea」
+----+---------------+-----------+
| id | ken_id | name |
+-----+-------------+-----------+
| 1 | 1 | 渋谷1丁目|
+-----+-------------+-----------+
テーブル「area」
+----+---------------+-----------+
| id | grouparea_id | name |
+-----+-------------+-----------+
| 1 | 1 | 渋谷1丁目|
+-----+-------------+-----------+
| 2 | 1 | 渋谷2丁目|
+-----+-------------+-----------+
このような変更しなくてはいけないですよね?(このような変更が可能なのかは分かりませんが・・・)
自分的にはこのやり方は違うような気がするのですが、
なにか良いやり方や考え方があればアドバイス頂けないでしょうか?
No.2ベストアンサー
- 回答日時:
いっそ、ファイルシステムのディレクトリの様なツリー構造と考えてしまって上位のIDを保持するようにしてはどうですか?
例) テーブル「area」
+----+----------+---------+
| id | name | upper_id |
+----+----------+---------+
| 1 | 関東 | (null) |
+----+----------+---------+
| 2 | 東京都 | 1 |
+----+----------+---------+
| 3 | 渋谷1丁目 | 2 |
+----+----------+---------+
| 4 | 渋谷2丁目 | 2 |
+----+----------+---------+
構造的には、県の上位に市を設定したり、自分自身のIDを上位IDに設定する事も出来てしまいますから、そこら辺はアプリケーション側で管理する必要が有りますが。
さらに地域の種別を表すコードのカラムを設けて、どの階層かを管理しても良いかも知れません。
参考URL:http://www.geocities.jp/mickindex/database/db_tr …
ご回答ありがとうございます。
なるほど、上位IDの階層構造ですね。
それにroot139さんが仰るように種別のIDを持たせるのが
今のところ現実的な感じですね。
参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- Oracle SQL update方法 2 2022/06/22 14:07
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
VIEWの元のテーブルのindexって...
-
insertを高速化させたい
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
一つ前のレコードの値と減算し...
-
SQLサーバから、項目の属性(型...
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
テーブル名を省略して「h.id」...
-
SELECT~LIKE~の結果が変
-
[MySQL] UNIQUE制約の値を更新...
-
1テーブル&複数レコードの更新...
-
マイクラPC版のコマンドで効率...
-
URL と行番号の指定
-
副問合せの書き方について
-
上位3位を求めるSQL文は?
-
SQLにて特定の文字を除いた検索...
-
mysqlのload data infileで連番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報