DB Schema per un questionario - Output diverso da diverse combinazioni di risposte

0

Un utente è tenuto a compilare un questionario - rispondendo alle domande in varie categorie.

A seconda delle risposte dell'utente, all'utente verrà presentato un numero di raccomandazioni.

  • Una raccomandazione potrebbe avere una relazione 1: 1 con la domanda posta
  • È possibile formulare una raccomandazione sulla base di una o di un'altra domanda a cui è stata data risposta. (O, O)
  • Alcune raccomandazioni saranno formulate sulla base delle risposte fornite da 3 di 9 domande. per esempio. la raccomandazione 1 verrà visualizzata quando 3 da una serie di domande riceve una risposta positiva.

Sto cercando assistenza con la creazione di una ricerca generica in modo tale che, in base alle risposte dell'utente, posso fornire le raccomandazioni.

Le domande possono essere aggiunte e rimosse, allo stesso modo le raccomandazioni possono essere aggiunte e rimosse. Devo mantenere il sistema abbastanza generico ed estensibile.

Schema finora:

CREATE TABLE 'categories' (
  'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'category' varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  'description' text COLLATE utf8_unicode_ci NOT NULL,
  'order' int(11) NOT NULL DEFAULT '10',
  'created_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'updated_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'deleted_at' timestamp NULL DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE 'questions' (
  'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'category_id' int(10) unsigned NOT NULL,
  'question' text COLLATE utf8_unicode_ci NOT NULL,
  'order' int(11) NOT NULL DEFAULT '10',
  'created_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'updated_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'deleted_at' timestamp NULL DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE 'recommendations' (
  'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'recommendation' varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  'code' varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  'created_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'updated_at' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  'deleted_at' timestamp NULL DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
posta Gravy 14.02.2015 - 19:21
fonte

2 risposte

1

Ciò di cui hai bisogno è un'ulteriore tabella che mappi le domande a un gruppo di domande e un altro gruppo di domande di mappatura a raccomandazioni. Sulla base di questi dati, è possibile interrogare il questionario e trovare tutti i gruppi di domande che corrisponde completamente. Da questo, puoi ottenere i tuoi consigli.

    
risposta data 15.02.2015 - 05:29
fonte
-1

La maggior parte delle persone in produzione è dolorosamente costretta a mantenere le cose semplici man mano che le dimensioni dei dati aumentano. C'è una forma normale e una forma non normale nel design e il mondo reale è un animale diverso. Quindi potresti non voler partecipare a cinque tavoli in produzione.

Quindi in una forma non normale, una tabella. È importante isolare le modifiche dei dati in modo da non essere obbligati a modificare la struttura delle tabelle in produzione a causa dello spostamento della funzionalità del client. Può usare XML, HTML o altri formati come JSON. L'obiettivo qui è quello di mantenere la struttura semplice e flessibile, in quanto le esigenze dei clienti cambiano continuamente.

Un buon controllo è quello di scrivere sempre le dichiarazioni selezionate in modo che corrispondano alle funzionalità aziendali e semplificare di conseguenza le tabelle. Le regole aziendali nel progetto principale chiariranno le relazioni.

Senza un contesto completo una risposta completa è inutile con la tua domanda.

    
risposta data 15.02.2015 - 01:56
fonte

Leggi altre domande sui tag