[英]advice MySql tables design
大家好,我想知道是否有更好的方法來處理一些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;
所以我首先想到的是用屬性名稱創建另一個表,並有2個這樣的表
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;
您會如何建議呢? 在您的時間提前。 希望我有某種意義
我認為您需要3個表,一個用於任務及其屬性,另一個用於評估字段,其中包含此評估的名稱和任何其他屬性,並且此表與任務之間的關系將會很多,這意味着第三個表基本上應具有任務的ID,評估字段的ID和所需的其他屬性
您不想每年左右更改結構。 您需要定義一個足夠靈活以適合您的用例的設計。
我建議您應該可以使用3個表來管理它:
屬性包含可用於評估任務的所有屬性。 它基本上是一個參照表,僅當需要創建新的評估屬性時(大約每年一次),才修改其內容。 喜歡 :
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.