常量表设计MySQL最佳实践

时间:2017-06-27 10:46:47

标签: mysql database-design sqldatatypes

我需要存储一组“重量”'常量,将定期更改,这些常量将在某些计算中使用。以下哪项是更好的表设计,或者两者都没有!

这是我需要存储的内容:

Month Weight (%)
Jan 5
Feb 5
Mar 10
Apr 10
May 10
Jun 10
Jul 10
Aug 10
Sep 10
Oct 10
Nov 5
Dec 5

包含1行12列的表:

CREATE TABLE IF NOT EXISTS `constant_month` (
  `month_01` DECIMAL(5,2) NOT NULL,
  `month_02` DECIMAL(5,2) NOT NULL,
  `month_03` DECIMAL(5,2) NOT NULL,
  `month_04` DECIMAL(5,2) NOT NULL,
  `month_05` DECIMAL(5,2) NOT NULL,
  `month_06` DECIMAL(5,2) NOT NULL,
  `month_07` DECIMAL(5,2) NOT NULL,
  `month_08` DECIMAL(5,2) NOT NULL,
  `month_09` DECIMAL(5,2) NOT NULL,
  `month_10` DECIMAL(5,2) NOT NULL,
  `month_11` DECIMAL(5,2) NOT NULL,
  `month_12` DECIMAL(5,2) NOT NULL)
ENGINE = InnoDB

包含12行和6列的表格:

CREATE TABLE `constant_month` (
  `constant_month_id` int(11) NOT NULL,
  `create_date` datetime NOT NULL,
  `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `number` int(11) NOT NULL,
  `name` varchar(25) NOT NULL,
  `weight` decimal(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二个选项允许更多信息,但不一定非必需。

扩展这个问题如果我需要存储的常量是不同的数据类型会发生什么?在这种情况下,它们都是百分比,但我有另一个常量表,需要混合数据类型。选项1是否更好,我可以专门为每个常量(INT,DECIMAL和FLOAT的混合)设置数据类型,或者使用带有通用TEXT数据类型的选项2?

由于

1 个答案:

答案 0 :(得分:0)

  • “通用TEXT数据类型” - 不好,特别是如果您需要比较数值。
  • 跨列传播数组 - 糟糕。 (1排12-col方法)。
  • 您是否需要12x6方法中的所有6列?