[解決済み] SQL Server データベースで単一行構成テーブルを使用する。悪い考えですか?
2022-04-26 02:17:45
質問
ショッピングカートアプリケーションの開発において、管理者の好みや要件に基づいた設定や構成を保存する必要があることに気づきました。この情報は、会社情報、配送アカウントID、PayPal APIキー、通知設定など、何でもありです。
リレーショナルデータベースシステムで1行を保存するためにテーブルを作成するのは、非常に不適切だと思われます。
この情報を保存するには、どのような方法が適切でしょうか?
注:私のDBMSはSQL Server 2008で、プログラミング層はASP.NET(C#で)で実装されています。
どのように解決するのですか?
私は過去に、1行のテーブルとキーと値のペアのテーブルという2つの方法でこの方法を行ったことがありますが、それぞれの方法にはプラスとマイナスがあります。
単一行
- 正:値が正しい型に格納されていること
- 正:コードで扱いやすくなる(上記のため)
- 正:各設定に個別にデフォルト値を与えることができる
- 否定的: 新しい設定を追加するには、スキーマの変更が必要です。
- 否定的: 多くの設定がある場合、テーブルが非常に広くなることがあります。
キー/バリューペア
- 正:新しい設定を追加してもスキーマの変更は必要ない
- positive: テーブルスキーマが狭く、余分な行は新しい設定に使用されます。
- 否定的: 各設定は同じデフォルト値を持つ(null/empty?)
- 否定的: すべてを文字列として保存する必要がある (つまり nvarchar)
- 否定的: コードで設定を扱う場合、設定がどのようなタイプであるかを知り、それをキャストする必要があります。
単行本のオプションは、圧倒的に作業しやすいものです。なぜなら、各設定をデータベースに正しい型として格納することができ、設定の型とそのルックアップキーをコードに格納する必要がないからです。
この方法で心配だったのは、1行の設定テーブルに複数の行が存在することです。私は、(SQL Serverで)これを克服しました。
- 新しいbit列を追加し、デフォルト値を0にする。
- この列の値が0であることを保証するチェック制約を作成します。
- bit列に対する一意制約の作成
これは、bit列の値が0でなければならないが、一意制約のため、その値を持つ行はテーブル内に1つしか存在できないことを意味します。
関連
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
-
[解決済み】SQL Server 既存テーブルへのSELECT。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
windows mysql prompt access denied for user ''@'localhost' to database.
-
executeQuery()ソリューションでデータ操作文を発行できない。
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] SQL SELECT WHERE フィールドに単語が含まれる場合
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する