嘿,伙计们,我想知道是否有更好的方法来处理mysql表。我必须(在php应用程序中)根据9个属性评估任务是如何完成的,问题是,每年一次,列可能会改变一次(命名而不是评估字段的数量)。
CREATE TABLE IF NOT EXISTS `grades` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`score_id` int(10) NOT NULL,
`task_number` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`assigned_to` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`location` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL,
`completed_at` date NOT NULL,
`priority` tinyint(1) NOT NULL DEFAULT '0',
`worknotes` tinyint(1) NOT NULL DEFAULT '0',
`client_com` tinyint(1) NOT NULL DEFAULT '0',
`closure_info` tinyint(1) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '0',
`category` tinyint(1) NOT NULL DEFAULT '0',
`ci` tinyint(1) NOT NULL DEFAULT '0',
`timecard` tinyint(1) NOT NULL DEFAULT '0',
`resolution_time` tinyint(1) NOT NULL DEFAULT '0',
`validated` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;因此,我的第一个想法是创建另一个具有属性名称的表,并有两个这样的表
CREATE TABLE IF NOT EXISTS `grades` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`score_id` int(10) NOT NULL,
`task_number` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`assigned_to` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`location` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL,
`completed_at` date NOT NULL,
`grade1` tinyint(1) NOT NULL DEFAULT '0',
`grade2` tinyint(1) NOT NULL DEFAULT '0',
`grade3` tinyint(1) NOT NULL DEFAULT '0',
`grade4` tinyint(1) NOT NULL DEFAULT '0',
`grade5` tinyint(1) NOT NULL DEFAULT '0',
`grade6` tinyint(1) NOT NULL DEFAULT '0',
`grade7` tinyint(1) NOT NULL DEFAULT '0',
`grade8` tinyint(1) NOT NULL DEFAULT '0',
`grade9` tinyint(1) NOT NULL DEFAULT '0',
`validated` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;和
CREATE TABLE IF NOT EXISTS `evaluation_fields` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
COMMIT;
INSERT INTO `evaluation_fields` (`id`, `name`) VALUES
(1, 'Priority'),
(2, 'Worknotes'),
(3, 'Client Com'),
(4, 'Closure information'),
(5, 'Status management'),
(6, 'Category management'),
(7, 'CI identification', ),
(8, 'Timecard management'),
(9, 'Resolution Time');
COMMIT;你建议怎么做呢?为你的时间提前。希望我说得有道理
发布于 2018-12-16 12:38:59
你不想每年都改变结构。您需要定义一个足够灵活的设计,以适应您的用例。
我建议你应该能够用三个表来处理这个问题:
属性包含所有可用于计算任务的属性。它基本上是一个引用表,它的内容只有在需要创建新的计算属性时才会被修改(大约每年一次)。比如:
id - primary key
name - name of the evaluation attribute 等级用于存储评估结果。每个评估有一行,有几个字段包含评估的主数据,如下所示:
id - primary key
score_id
task_number
assigned_to
location
completed_at
priority 计算用于存储每个评估的详细信息。它对每个计算使用的每个属性都有一行,并使用外键引用上述两个表,例如:
id - primary key
grade_id - foreign key to column id in table grades
evaluation_id - foreign key to column id in table attributes发布于 2018-12-16 09:20:15
我认为您需要3个表--一个用于任务及其属性,另一个用于包含此计算的名称和任何其他属性的计算字段,并且这个表与任务之间的关系将是多到多的--这意味着第三个表基本上应该具有任务的id和计算字段的id以及其他需要的属性。
https://stackoverflow.com/questions/53800676
复制相似问题