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

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

新規登録して質問してみよう
ただいま回答率
85.48%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

5回答

1145閲覧

データベース設計、外部テーブルについての質問です。

退会済みユーザー

退会済みユーザー

総合スコア0

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/02/06 03:03

データベース設計、外部テーブルについての質問です。
テーブルを設計し、(②と③は外部テーブルです)
イメージ説明
上司に報告したところ、
「これではIDのCのように西インド諸島エリアに中国、のような矛盾が出てくる」と指摘されました。
最終的には
![イメージ説明
のように新しく外部テーブルを設定すればよいと上司から教わったのですが、この新しい外部テーブルでなぜ矛盾がでなくなるのかません。

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

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

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

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

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

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

x_x

2019/02/06 03:07

テーブル1が最後のテーブルになったのではなく、別のテーブルとして最後のテーブルを用意なんですか? 二重管理にしか見えませんが
guest

回答5

0

ベストアンサー

元の構造だと、
①(国)→②(国)
①(エリア)→③(エリア)
という風に外部参照が独立していますので、矛盾した組み合わせが可能です。

一方、新しい構造だと、①との関係を①(国ID)→新テーブル(ID)とする前提で、
新テーブルでは、組み合わせを定義する事になるので紛れはありません。

②にエリアを追加して
①(国ID)→②(ID):②(エリア)→③(エリア)
という関係でも問題ないですし、どちらかというとその方が正当なものでしょう。

投稿2019/02/06 04:15

編集2019/02/06 04:29
sazi

総合スコア25188

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

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

0

構造は変っているように見えませんが
単にc7→are14という間違っているデータをare1に変更しただけでは?

あとはメインテーブルのIDがプライマリーキーであれば
なんらかの意味をもったり、付け方の法則を決めなくてはならない文字列型より
意味をもたない単に違うことだけ担保する数値の方が管理はしやすくなります

投稿2019/02/06 03:14

yambejp

総合スコア114829

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

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

0

私にも分からないですね。。。
この手の矛盾はDB設計で防ぐことは難しいと思います。
アプリケーションでも。。。難しいですね。
少なくともすぐには思いつかないです。

内容はともかく、教えてもらえるだけ良心的な上司だと勝手に想像しています。
致命的な不具合が発生しないのであれば、騙されたと思って
上司の案に従っても良いのではないでしょうか。
エンジニアというよりかは、社会人的にそちらが正解のような気がします。

13:26追記
sazi様の回答が正しいと思ったので、訂正します。

投稿2019/02/06 04:19

編集2019/02/06 04:26
Kaiser

総合スコア295

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

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

0

通常はISO 3166で設計するのでは?ISOを使っておかないと、今はともかく、将来社外とデータをやり取りする必要が出てきた時に困るのでは?
ISO 3166-1 国名コード
ISO 3166-2 行政区画名あるいは属領名をコードで表示するための地理コード系

投稿2019/02/06 03:51

Orlofsky

総合スコア16415

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

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

Stan_Dma

2019/02/06 04:12 編集

(deleted comment)
guest

0

ある「国」(②)は、所属するエリア(③)をただ一つだけ持つ、のですから、本来なら②にエリアを示すIDが組み合わさらないといけません。

ですから、②のテーブルが「国」「国名」「エリア」になるようにカラムを一つ追加しましょう。

※②は①の外部テーブルであり、③は②の外部テーブルになるのです

投稿2019/02/06 03:07

tacsheaven

総合スコア13703

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

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

Stan_Dma

2019/02/06 03:21 編集

I don't understand what no.1 table is for. Simply to add the country id column to the no.3 table seems to be suitable.
Stan_Dma

2019/02/06 03:57

Sorry, I was wrong! Area id sould be added to the no.2 table as tacsheaven-san said. But there seems no need to use no.1 as table.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問