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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1321閲覧

DBの設計について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2015/09/13 15:20

普段phpでアプリケーションを作成しているんですが、
MySQLデータベースの設計についていま勉強中です。

ちょっと疑問なのが以下の様な例です。
・主キーの定義
社員ID 社員名 子
0001 田中 太郎
0001 田中 二郎
0002 鈴木 涼一
0003 田辺 吉市
という扶養のテーブルがあるとして、ここで主キーは重複しないのを考えると「子」にあたるんでしょうか?
・インデックスファイルの定義
テーブル作成時に属性にインデックスファイルを指定しますが、これは主キーにするべなのでしょうか?
・主キーはプログラミング時のSQL文の結合で使用しますが、何か明示的にDB構築時に設定必要でしょうか?何か印てきなものがあったほうが分かりやすい気がしますが。。

例がわかりづらかったら申し訳ありません。。

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

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

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

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

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

guest

回答2

0

ベストアンサー

  • このテーブルに「社員名」カラムは冗長です。おそらく社員IDを主キーとする社員テーブルもあるはずで、そちらで社員名は引けるからです。このような状態を「正規化されていない」と表現します。勉強中の段階ではテーブルは常に正規化すべきでしょう。
  • 主キーは必要です。でないと、目的の行を消すことさえできません。(上記のテーブルで、うっかり同じ社員に同名の子供を作ってしまったら、どうやって新しい方の一行だけ消しますか?)

投稿2015/09/13 15:45

編集2015/09/14 01:44
yuba

総合スコア5568

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

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

0

気になるのは、扶養ということは配偶者等も扶養として扱わなくて良いのかという点ですね。

社員テーブル
社員ID(PK)
社員名
扶養の有無


扶養テーブル
社員ID(PK)
扶養ID(PK)
扶養対象氏名
続柄


例えばですが、最近はあまり見ませんが「祖父の名前を子供につける」というケースがありました。
そうすると、同一社員で扶養対象者氏名が重複してしまうことが起こりうるのです。

実際、
扶養テーブル
社員ID(PK)
扶養対象氏名(PK)
続柄(PK)



このPKでも重複はほぼ起きないでしょう。
しかし氏名や続柄をPKにするのはDB設計者のエゴでプログラマの利便性を考えれば扶養IDとして社員IDごとのサロゲートキーを持たせるのが良いのかなと思います。
社員IDと違って、扶養者をIDで特定するケースは多くはないと思いますが、扶養者をID管理する方が運用としてもメリットがある場合もあるのかな…。
会社によるかもしれませんね。

■PKの設定について
http://dev.mysql.com/doc/refman/5.6/ja/create-table.html

SQL

1create table emp 2( 3 emp_id char(4) , 4 emp_name varchar(20), 5 . 6 . 7 . 8 constraint pk_emp primary key(emp_id) 9)

PKはprimary keyで指定すれば自動でPKになります。
PKにしてしまえば、自分でINDEXを貼ったりUNIQUEを設定する必要はありません。

投稿2015/09/14 01:35

anonymouskawa

総合スコア856

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問