簡體   English   中英

咨詢MySql表設計

[英]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.

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