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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SQLite

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

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

217閲覧

Webアプリケーション DB設計 ユーザー毎に違うカラムを持たせたい。

_Victorique__

総合スコア1392

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SQLite

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

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/14 04:33

Vue + Djangoを用いてWebアプリケーションを作成しております。
その中で少し問題があります。

ユーザー毎に違うカラムを持たせることが必要になりました。
例えば、Aさんはx, y, zというカラム、Bさんはi, j, kというカラムを持たせたいとした時に、
どういうDB設計をすれば良いのでしょうか?
最初は空のテーブルを用意して、後からユーザーが追加するということができるのでしょうか?
そもそもユーザーごとにテーブルを用意することが出来るのでしょうか?

初心者ですが宜しくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ユーザー毎に違うカラムを持たせることが必要になりました。

そもそも正規化から外れるという要件ですので、規格外の型で対応する事になりますね。
json型や配列型、若しくは文字型で,区切りで格納するとか

投稿2019/01/14 05:10

編集2019/01/14 05:14
sazi

総合スコア25173

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

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

_Victorique__

2019/01/14 05:13

回答有難うございます。 なるほど、json型を取れることは盲点でした。 やりたいことにすごくマッチしていると思います。 ちなみになのですが、json型として扱うことにデメリット等はありますでしょうか?
sazi

2019/01/14 05:17 編集

基本、検索性能は落ちると思います。 json型に対応したインデックスを装備しているRDBMSもありますが。 後は、データのアクセスについてどの程度のライブラリが利用できるかでしょうね。
sazi

2019/01/14 05:18

因みにDBMSはDB2ですか?
_Victorique__

2019/01/14 05:24

標準を使っていると思うのでSQLiteだと思います。 答えになっているでしょうか?
sazi

2019/01/14 05:28 編集

>標準を使っていると思うのでSQLiteだと思います。 思いますだと厳しいですね。SQLiteもjson型は対応しているようですけど。 また、データの関係についての考え方はkaiserさんと同じです。 それを行方向で持つか、カラムとして畳むかという事ですので。
_Victorique__

2019/01/14 05:58

なるほどです。 SQLiteで間違いなさそうです。 考えてみた結果、両方を採用した方が良いという結論に至りました。 有難うございました!
guest

0

ユーザーごとに違う属性と値を持たせたい。ということですね。

まずは、質問に答えます。
>ユーザーごとにカラムを追加したい。
→申し訳ないのですが、RDBではそのような機能をあまり聞かないですね。。。
ドキュメント型DBでしたら、自由な形式で値を格納できるそうです。

以下は、一般的なRDBを使う前提で回答します。
私でしたら、このようにテーブルを設計します。

ユーザーマスタ(ユーザーID,ユーザー名)
ユーザー属性マスタ(属性ID,属性名)
ユーザー属性値(ユーザーID,属性ID,属性値)

こうすると、ユーザーごとに違う属性を持たせることができます。
また、ユーザーごと、属性ごとにつけ外し、変更が可能です。


ユーザー名:Kaiser
タイプ:炎
性格:いじっぱり

ユーザー名:Enperar
タイプ:水

■ユーザーマスタ

ユーザーIDユーザー名
111Kaiser
112Enperar

■ユーザー属性マスタ

属性ID属性名
1タイプ
2性格

■ユーザー属性値

ユーザーID属性ID属性名
1111
1112いじっぱり
2221みず

投稿2019/01/14 04:47

Kaiser

総合スコア295

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

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

_Victorique__

2019/01/14 05:12

回答有難うございます。 なるほど、このような設計もあるのですね。 参考になりました。有難うございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問