2017-04-06 6 views
0

Ich habe Benutzer-Tabelle in Laravel-Projekt. Es gibt eine Aufgabe, jeder Benutzer muss mindestens 1 und höchstens 4 Sprachen festlegen, die er spricht. Für jede Sprache muss der Benutzer das Sprachniveau festlegen. Also, wie organisiert man das richtig?Organisation der Datenbankstruktur

Ich denke über einige Möglichkeiten:

  • Fabrikat 8 Felder für jede Sprache und Niveau, einige von ihnen

    null bleiben kann
  • Shop in einem Feld einige Struktur wie JSON oder einige andere und analysieren es jedes Mal, wenn Daten erhalten

Beide sehen aus wie eine Krücke. Ich hoffe, ich weiß einfach nichts.

Ich brauche eine Best-Practice-Lösung.

+0

Benutzer Tabelle und Sprachtabelle Fremdschlüssel in Sprachtabelle ist die Benutzer-ID Spalte – RiggsFolly

+0

Vorschlag: https://www.lynda.com/Access-Tutorials/Relational-Database-Fundamentals/145932-2.html?utm_source=google&utm_medium = cpc & utm_campaign = l1-US-Suche-IT-Relational + Datenbank & cid = l1-us: de: ps: lp: proz: s2057: 140: alle: google: mbm-relational_database_tutorial & utm_content = 65092029426 & utm_term =% 2Brelational% 20% 2BDatenbank% 20% 2BTutorial & src = go-pa & veh = skwd-83214329586_pcrid_65092029426_pkw_% 2Brelational% 20% 2BDatenbank% 20% 2Btutorial_pmt_b_pdv_c_ext__plc__trg__agid_14657628426_cmid_235483506_adp_1t1_net_g & lpk35 = 9137 # tab – RiggsFolly

+2

Benutzertabelle; Sprachtisch; und eine XRef-Tabelle für UserLanguage mit den Spalten user_id, language_id und proficiency –

Antwort

0

Verwenden Many to Many relationship

Zum Beispiel sind viele Benutzer kann die Sprache „Englisch“ haben. Um diese Beziehung zu definieren, werden drei Datenbanktabellen benötigt: users, languages und language_user. Die Tabelle language_user ist von der alphabetischen Reihenfolge der Modellnamen abgeleitet und enthält die Spalten user_id und language_id.

Die Migration der language_user Tabelle zu erstellen:

public function up() 
{ 
    Schema::table('language_user', function (Blueprint $table) { 
     $table->increments('id'); 

     //Language foregn key 
     $table->integer('language_id')->unsigned(); 
     $table->foreign('language_id')->references('id')->on('languages'); 

     //User foregn key 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 

    }); 
} 

die Beziehung definieren:

Benutzermodell

class User extends Model 
{ 
    /** 
    * The languages that belong to the user. 
    */ 
    public function languages() 
    { 
     return $this->belongsToMany('App\Language'); 
    } 
} 

Sprache Modell

class Language extends Model 
{ 
    /** 
    * The users that belong to the language. 
    */ 
    public function users() 
    { 
     return $this->belongsToMany('App\User'); 
    } 
} 

Und jetzt haben Sie eine sauberere Benutzer-/Sprachtabelle und alle Sprachen werden im Language_user gespeichert.

Ps. Ich gehe davon aus, dass Sie eine Tabelle mit dem Namen languages verwenden, um die Sprachen zu speichern. Wenn Sie das nicht tun, müssen Sie auch eine Tabelle und ein Modell erstellen.