簡體   English   中英

MySQL存儲很多位大小的設置

[英]Mysql storing lots of bit sized settings

我有約38列的表格。

IDname和其他36個是用戶的位大小設置。

其他36列分為6個“設置”,例如Setting1_onSetting1_colored等。

這是最好的方法嗎?

謝謝。

如果必須在一個表中並且它們都是切換類型設置,例如yes / no,true / false等,請使用TINYINT節省空間。

我建議創建一個單獨的表“設置”,其中包含36條記錄,每個選項一個。 然后使用值列創建到用戶表的鏈接表以記錄用戶設置。 這將為用戶設置創建一個多對多鏈接。 這也使添加新設置變得容易-只需向“設置”表中添加新行。 這是一個示例架構。 我使用varchar作為設置的值,以允許以后的設置(可能不是位)​​,但是如果大小有問題,請隨時使用TINYINT。 此解決方案將不會使用一個表那么多的空間,而會產生大量的稀疏填充的列。

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;

一切都取決於您要如何訪問它們。 如果要(或必須)只是選擇其中之一,則使用@Ray解決方案。 如果可以對其進行功能分組(實際上,不是所有以F開頭的分組都假裝分組),即。 您將始終需要多個函數才能使用它們,並且將它們作為單獨的標志進行讀取和編寫沒有任何意義,然后也許將它們存儲為int並在它們上使用邏輯運算符可能會變得更好。

這樣說,除非您在會話期間對數據庫進行大量讀取和寫入,否則將它們捆綁為int只會給您帶來很少的性能,否則,如果所有選項都必須存在,則會節省數據庫空間。 如果不存在= false,則可能是一個折騰。

所以所有事情都是不平等的,我會和雷先生一起去。

MySQL具有SET類型,在這里可能有用。 一切都可以放入一個SET中,但是六個SET可能更有意義。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM