1

テーブルに最大38列あります。

ID、、nameおよびその他の36は、ユーザーのビットサイズ設定です。

他の36の列は、6つの「設定」にグループ化されSetting1_onますSetting1_colored

これはこれを行うための最良の方法ですか?

ありがとう。

4

3 に答える 3

4

それが 1 つのテーブルにある必要があり、それらがすべて yes/no、true/false などのトグル タイプの設定である場合は、TINYINT を使用してスペースを節約します。

オプションごとに 36 レコードの個別のテーブル「設定」を作成することをお勧めします。次に、ユーザー設定を記録する値列を持つユーザー テーブルへのリンク テーブルを作成します。これにより、ユーザー設定の多対多リンクが作成されます。また、新しい設定を簡単に追加できます。「設定」テーブルに新しい行を追加するだけです。スキーマの例を次に示します。設定の値に varchar を使用して、ビットではない可能性がある後で設定できるようにしますが、サイズが問題になる場合は、TINYINT を自由に使用してください。このソリューションは、1 つのテーブルほど多くのスペースを使用せず、データがまばらに配置された大規模な列のセットになる危険性があります。

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `name` varchar(64) DEFAULT NULL,
  `address` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `setting` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) DEFAULT NULL,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `setting_user` (
  `user_id` int(11) NOT NULL DEFAULT '0',
  `setting_id` int(11) unsigned NOT NULL,
  `value` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`user_id`,`setting_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
于 2012-08-11T14:41:54.263 に答える
1

すべては、それらにアクセスする方法によって異なります。それらの1つだけを選択したい(または選択しなければならない)場合は、 @Ray ソリューションを使用してください。それらが機能的にグループ化できる場合 (実際には、F で始まるすべてのものをグループ化するふりをしているわけではありません)。関数には常にそれらの数が必要であり、それらの読み取りと書き込みは個々のフラグとしては意味がありません。おそらく、それらをintとして保存し、それらに論理演算を使用することは成功するかもしれません.

つまり、セッション中にデータベースに対して多くの読み取りと書き込みを行っていない限り、それらを int にまとめると、パフォーマンスがほとんど向上しません。すべてのオプションが存在する必要がある場合、DB のスペースを節約できます。存在しない = false の場合は、トスアップになる可能性があります。

すべてが不平等なので、私はレイさんと一緒に行きます。

于 2012-08-11T14:56:10.467 に答える
0

MySQL には、SETここで役立つタイプがあります。すべてが 1 つの SET に収まりますが、6 つの SET の方が理にかなっています。

http://dev.mysql.com/doc/refman/5.5/en/set.html

于 2012-08-11T18:02:32.460 に答える