2012-01-19 2 views
0

Я разрабатываю веб-приложение QA, которое будет иметь некоторые точки для оценки, присвоенные одной из следующих категорий.Хранение переменной количества значений чего-либо в базе данных

  • Управление вызовов
  • Технические навыки
  • управления билетов

Поскольку это, вероятно, не изменится, что не стоит делать их динамичными, но худшим моментом является, что точки, как в.

Сначала у меня была таблица качества, которая имела столбец для каждой точки, но затем менялись реквизиты, и я заблокирован.

Я должен хранить «оценки», которые имеют все точки с их значениями, но, возможно, в будущем эти точки будут меняться.

Я думал, что в таблице качества я мог бы сделать какие-то строки, которые имеют что-то вроде этого

1=1|2=1|3=2 

Где у вас есть наборы ID точки и пунктуации этого заданного значения.

Может ли кто-нибудь указать мне на лучший способ сделать это?

+3

Почему бы не сохранить эту связь в другой таблице [с]? –

+0

Я не уверен, что вы имеете в виду. Предполагается, что оценка должна иметь все возможные ценные пункты внутри –

ответ

1

Эта таблица не нормирована. Это нарушает 1st Normal Form (1NF):

Evaluation 
---------------------------------------- 
EvaluationId | List Of point=punctuation 
    1   | 1=1|2=1|3=2 
    2   | 1=5|2=6|3=7 

Вы можете прочитать больше о Database Normalization basics. таблица может быть нормирована как:

Evaluation 
------------- 
EvaluationId 
    1   
    2   

Quality 
--------------------------------------- 
EvaluationId | Point | Punctuation 
    1   | 1 | 1 
    1   | 2 | 1 
    1   | 3 | 2 
    2   | 1 | 5 
    2   | 2 | 6 
    2   | 3 | 7 
+0

Я думал об этом, но это привело бы к 20 вставленным строкам для оценки, если у меня есть 20 оценочных очков. Это оптимизировано? –

+0

Да, это лучше, потому что легче поддерживать, запрашивать, обновлять, применять ограничения и т. Д. Это стандартный дизайн базы данных. –

2

Как упоминалось много раз здесь, на SO, никогда не помещать более одного значения в поля БД, если вы хотите получить доступ к ним отдельно.

Поэтому я предлагаю, чтобы иметь 2 дополнительных таблиц:

CREATE TABLE categories (id int AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL); 
INSERT INTO categories VALUES (1,"Call management"),(2,"Technical skills"),(3,"Ticket management"); 

и

CREATE TABLE qualities (id int AUTO_INCREMENT PRIMARY KEY, category int NOT NULL, punctuation int NOT nULL) 

затем хранить и запрашивать данные соответственно

Смежные вопросы