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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

データベース

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

5540閲覧

ASP.NET Coreで動的にテーブルを生成したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

データベース

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2018/10/22 10:07

編集2018/10/22 14:48

こんばんは!ASP.NET Core2.2を使って、TSU〇AYAなどのビデオショップなどで使える顧客情報管理Webサービスを作る演習をしています。

現在、主要な機能は実装できたので応用として、顧客が増えるたびにその人専用のテーブルを作成して、お店を利用するたび、借りたDVDのタイトルや本数や日付などを記録していけたらと思っています。

方法としては、CustomerControllerのResisterアクション(顧客登録のときに呼ぶ)内で、顧客の名前や会員IDなどを用いてCustomerのリストに追加した後、一意の名前を持つテーブルを作成します。
以降、顧客がお店を利用するたびにRentアクションを呼んで、在庫管理などの処理をして、ついでに顧客専用テーブルに記録していくイメージです。
顧客登録のタイミングでテーブルを生成すればいいのはわかるのですが、方法を調べても、この記事のように、アプリが初めて起動したときにテーブルを作成する方法ばかりが検索に引っかかってしまいます。

DataContext.CreateDatabaseメソッドで頑張ればいけそうな気がしたので、格闘したのですが、気のせいだったようなので、質問させてもらいました。回答よろしくお願いします。

このサイトが一番答えに近い??)

追記:データベースとテーブルが混同して用いられていた箇所を修正しました。
さらに追記:初心者マークも付けました

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/22 11:45 編集

回答に差し替えました。
guest

回答2

0

質問文で言う「データベース」は「テーブル」の間違いだそうですが(間違いならきちんと訂正してください)、それでも、

顧客が増えるたびにその人専用のデータベースを作成して

・・・ということは、少なくとも ASP.NET Web アプリでは(多分他のすべての Web アプリでも)絶対にあり得ないと言ってもいいレベルの話で、テーブルを追加するのではなく、既存のテーブルにその新規顧客のレコードを追加するというように根本的に考え直すべきと思います。

Entity Framework Code First の機能を利用してコードからデータベースを生成することはできますが、それは開発時にコードを修正しながらそれに応じて LocalDB や SQL Server Express に作ったデータベースを作り直すというような開発時限定の話です。

運用環境で、ユーザーの要求に応じて、データベースにテーブルを追加するというような話は聞いたことがありません。少なくとも自分が知る限りあり得ません。

(もっとも、自分が知らないだけで、Core の新機能でそういうのがあるかもしれないということは否定しきれませんが。でもやっぱりあり得ないと思いますけど)

投稿2018/10/22 13:48

編集2018/10/22 14:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/10/22 14:28

あり得ないことなんですね!道理で検索しても出てこないわけですね... データベース関連の知識がそんなにないので、1つのテーブルが巨大化し続けるよりも、必要に応じて適度にテーブルを分けてあげた方が、いいかな~って思ったんですけどね... ppnさんの回答への返信にも書かせていただいたのですが、 もし例えば、色々なアンケートを掲載しているサイトの場合、アンケートごとに各列の属性(質問文)が違ってくると思うのですが、それも1つのテーブルにまとめちゃってもいいのでしょうか?この場合は、アンケートごとにテーブルを分けた方がいいような気がします(言語仕様的に推奨されるかどうかは別として) ご意見お聞かせください。
退会済みユーザー

退会済みユーザー

2018/10/22 14:37

質問のタイトルや最初の質問内容と違うことは新たに別のスレッドを立てて質問してください。Teratail は Know-how の蓄積も目的にしているそうですので、後日検索などでここにたどり着いた人もことを考えると、その方が良いのは理解していただけますよね。 それから、テーブルの構造をどうすべきかというような質問をするなら、もっともっと具体的に全体的にどのようなデータを考えているのか、明確なアイデアを持って、それを質問にきちんと書くようにしてください。でないと、たぶん誰も答えられません。 もう一つ、タイトルには初心者マークを付けることをお勧めします。
guest

0

ベストアンサー

ふつうは顧客ごとにデータベースを作成するようなことはしません。データベースではなく、テーブルの間違いのような気もしますが、それもしません。
一つのテーブルにまとめるのが普通です。

投稿2018/10/22 11:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/10/22 12:19

回答ありがとうございます!テーブルの間違いでした。 1つのテーブルにまとめるものなのですね。 今回の事例から離れますが、 もし例えば、色々なアンケートを掲載しているサイトの場合、アンケートごとに各列の属性(質問文)が違ってくると思うのですが、それも1つのテーブルにまとめちゃってもいいのでしょうか?この場合に限っては、アンケートごとに分けた方がいいような気がするのですが???? ご意見お聞かせください。
退会済みユーザー

退会済みユーザー

2018/10/22 12:56

んーと、私はその事例に出会ったことがなく、データベースの正規化の知識も中途半端なので、「こうです!」といったことが言えないのですが、仮にやるとしたら、…それはテーブルに分けたほうが楽かもしれませんね。ただ、テーブルがすごく増えそうなので、スキーマ?(フォルダみたいなもの)があればそこにまとめたり、接頭辞を付けたりしたいです。
退会済みユーザー

退会済みユーザー

2018/10/22 12:58

あと、テーブル操作は、場合により非常に怖いことなので(他のテーブルを触ったり、誤って消したりとか)、出来るだけしたくないなーーーーとも思います(トラウマ)。
退会済みユーザー

退会済みユーザー

2018/10/22 14:15

データベースからデータを取得する処理が重いって聞いたので、 テーブルを分けられれば毎回検索かけなくていいし、データ取得も早くなっていいかな~と思ったんですけどね... その分、テーブルが増えすぎて...ってことになってしまうんですね(トラウマの話聞きたいです)。
退会済みユーザー

退会済みユーザー

2018/10/22 14:24

それは何も知らない人の思いつきレベルの話ですよ。タイトルに初心者マークを付けることをお勧めします。
退会済みユーザー

退会済みユーザー

2018/10/22 15:19

ポエムなので返信は要りません。 私はただ純粋に疑問に思ったことを聞いただけなのですが、"初心者"の自由な発想はお嫌いでしょうか? 誰もが初めは初心者なわけですし、熟練者には想像もつかないような発想をするのは世の常というものです。 私の突飛な発想をここで共有した結果、現にこうして > 運用環境で、ユーザーの要求に応じて、データベースにテーブルを追加するというような話は > 聞いたことがありません という私のSQLの教科書に載っていない重要な知見が得られているわけですし、 初心者相手に強い言葉を遣うのは、控えていただけたらと思います。
退会済みユーザー

退会済みユーザー

2018/10/22 15:24 編集

だから初心者マークを付けるように言っているのですが。(最初はついてなかったと記憶してます。そうでなかったら失礼)
退会済みユーザー

退会済みユーザー

2018/10/22 15:26 編集

peter2368さんのおっしゃることもわからないこともないです。が、受け流せたほうがいいとも思います。また、実際にそこまで強い言葉でもないと思います(ほわほわした女性が同じ言葉を言ったとしたらだいぶニュアンスが変わると思いませんか?)。システムというものは問題が起こりやすいですし、お客さんが気を荒立てることもあれば、先輩からもっと強い言葉と口調が飛び出る場合もままあり得ます。もちろん、人によりますが。これはこの業界に限ったことではないとは思いますし、ないことがいいことではありますが。一応念のため。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問