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

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

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

dateは、date型や日付に関する関数や処理についてのタグです

SQL

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

Q&A

解決済

3回答

3707閲覧

DBの行と列でのデータの持ち方

enigumalu

総合スコア192

date

dateは、date型や日付に関する関数や処理についてのタグです

SQL

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

0グッド

0クリップ

投稿2017/02/14 06:02

グループ3社で対象になるユーザがどの会社の権限許可があるかの設定を設けようと思っているのですが、会社ごとの許可フラグをカラムとして列で持つか、
それともカラムを会社IDとし、レコードとして持つかどどちらの方がようか迷よっています。
どちらが良いか判断の基準やデータ上のベストプラクティスはありますでしょうか、件数が多いので検索時のスピードも気にしています
会社の追加は稀にある予定で、列で持った場合の最大数は5万くらいです。

データイメージ 列 user_id,a_comp_flag,b_comp_flag,c_comp_flag,rest_date suzuki,1,0,1,2016-12-12 行 user_id,comp_cd,rest_date suzuki,sample_company,2016-12-12 suzuki,syousya_company,2016-12-12

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

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

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

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

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

coco_bauer

2017/02/14 06:09

権限許可有無のデータは、どのように使うつもりなのでしょうか? 会社ごとの権限許可の種類は共通ですか、それとも会社ごとに異なるのでしょうか? 1つの会社の複数の種類の権限許可を持つことはありうるのでしょうか?
enigumalu

2017/02/14 06:23

アクセス権限のため1社につき許可フラグは1つで、権限の種類も1つです。 他社のアクセス自体は出来ても良いため、社員は複数会社の権限を持つ必要があるという想定です。
guest

回答3

0

ベストアンサー

表を書く機能があるので、機会があれば使用してみてくださいね。

データイメージ

|user_id|a_comp_flag|b_comp_flag|c_comp_flag|rest_date|
|:--|:--:|--:|
|suzuki|1|0|1|2016-12-12|

本題ですが、掲題通りなら列で持ちしますね。
会社の追加頻度が低、構造化してれば列追加による変更もそんなに大きくはないでしょう。

拡張性を考えるのでしたら行持ちですかね。
例えば各会社毎の権限の中でもこの会社の人事機能は許可、会計機能は不許可といった、
権限機能の強化や別テーブルで更に参照するなどを考えた場合はこれですか。
その場合はIndexに注意しないと検索速度が...ってなりそうですが。

投稿2017/02/14 08:08

kurori

総合スコア111

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

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

enigumalu

2017/02/15 06:35

運用後のテーブルの列追加は怖いですがやたらめったら増えるようなものでは無いはずなのでこれに列持ちにしようと思います
guest

0

あらゆるリレーショナルデータベースは、正規化されたデータを扱うことに最適化されています。
このケースは典型的な多対多結合ですので、中間テーブル(permissionテーブル)を持つのがベストプラクティスです。
またユーザや会社は名前が変わることが普通にあります。
ですから、プライマリーキー(id)と検索用のインデックス(code)は別に登録するほうが扱いやすいです。
以上を踏まえるとこんな感じになります。

userテーブル id, code, name ---------------------- 1, suzuki, 鈴木太郎 2, yamada, 山田花子 companyテーブル id, code, name ---------------------- 1, sample_company, サンプル株式会社 2, syousya_company, 株式会社勝者 permissionテーブル user_id, company_id ---------------------- 1, 1 1, 2

詳しくは、"RDB 正規化" や "RDB 多対多結合" でwebページを検索してみてください。

投稿2017/02/14 08:07

編集2017/02/14 08:13
hihijiji

総合スコア4150

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

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

0

「会社ごとの許可フラグをカラムとして列で持つ」のが良いと思います。

3社の許可の有無(3カラム分)を持たせるだけなので、無理に複雑な構造にする必要があるとは思えません。

ある社の許可を持っているかどうかを調べる場合、列で持つなら1回の検索で済みますが、許可の有無を別テーブルで持つと検索が2回必要になるのでスピードは落ちる可能性が高いです。

投稿2017/02/14 07:19

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問