Array in eine einzelne Zeile in die Datenbank einfügen

8

Ich frage mich, ob das machbar wäre? Um ein Array in ein Feld in der Datenbank einzufügen.

Zum Beispiel habe ich einen Titel, ich möchte diesen Titel mit nur einer ID haben, aber er wird auf der Website zweisprachig verwendet.

Es fühlt sich ein wenig unnötig an, eine andere Tabelle mit ihren globalen IDs zu versehen und dann eine andere Tabelle mit den eigentlichen Titeln, die mit der globalen ID verknüpft sind.

Ich möchte nur so etwas haben

%Vor%

Ich benutze PHP / MSYQL, also wenn es machbar wäre, könntest du bitte in diesen Sprachen erklären.

Oh ja, ich dachte, ich könnte es funky formatieren und die Split-Funktion verwenden, um es wieder in ein Array zu verwandeln. Aber ich frage mich, ob ich es sofort als ein Array speichern könnte. Ich denke, der Benutzer könnte etwas mit der gleichen Formatierung (eins von einer Million) eingeben

    
Kasper 09.10.2008, 01:32
quelle

4 Antworten

15

es ist machbar:

%Vor%

und dann zu dekodieren:

%Vor%

aber wie erwähnt, verringert es wirklich die Vorteile einer Datenbank an erster Stelle. Ich würde definitiv vorschlagen, stattdessen eine Multi-Table- oder Multi-Column-Option zu betrachten, abhängig von der Anzahl der Sprachen, die Sie unterstützen möchten und ob sich diese Zahl in Zukunft ändern wird.

edit: ein guter Punkt von dcousineau (siehe Kommentare)

  

Manchmal wirft die serialisierte Ausgabe selbst nach dem Entweichen Zeichen in die Abfrage, die die Dinge vermasselt. Sie möchten möglicherweise Ihre serialize () in base64_encode () -Aufrufe umbrechen und dann base64_decode () verwenden, bevor Sie die Serialisierung durchführen.

angepasster Code für diese Situationen:

%Vor%     
Owen 09.10.2008, 01:43
quelle
6

Es gibt wirklich nur zwei vernünftige Möglichkeiten:

Einer anderen Tabelle beitreten
Profis: unbegrenzte Titel in unbegrenzten Sprachen Nachteile: Join Overhead ist rechenintensiver, SQL ist geringfügig komplexer zu aktualisieren / einfügen usw.

Mehrere Spalten
zB: TITLE_EN, TITLE_NL, TITLE_DE
Profis: schnell einfügen, auswählen, etc
Nachteile: begrenzte Anzahl von Sprachen, Hinzufügen von mehr ist ein ALTER TABLE

Angesichts unserer beiden Möglichkeiten sollten Sie normalerweise die erste auswählen. Es sei denn, Sie haben nur eine obszöne Menge von Transaktionen, die nicht parallelisiert werden können, oder Sie können absolut sicher sein, dass Sie keine Sprachen hinzufügen, die zusätzliche Flexibilität im Schema-Layout wird Ihnen auf lange Sicht Kopfschmerzen ersparen.

    
bmdhacks 09.10.2008 01:39
quelle
2

Arrays verletzen die Normalisierung; In meiner Erfahrung mit Internationalisierungsdatenbanken habe ich festgestellt, dass die Verwendung der Phrasen normalisiert das beste Design ist,

Ich erlaube es Ihnen, einfach Großkopien von Zeilen zu erstellen - zum Beispiel 'es' zu 'es-mx' oder 'en' zu 'en-US', 'en-GB' und mein Favorit: 'xx-piglatin ". In einem Array-Schema müssten Sie entweder jeden Datensatz neu schreiben oder komplexes Parsen hinzufügen oder etwas verwenden, das komplexer ist als Arrays, wie XML.

Es ist relativ einfach, LEFT JOIN s zu verwenden, um nicht übersetzte Phrasen für Arbeit zu finden und auch COALESCE zu verwenden, um einen Standardwert zurückzugeben, so dass das Programm auch dann verwendbar bleibt, wenn die Phrase nicht übersetzt wird.

    
Cade Roux 09.10.2008 01:50
quelle
1

Verwenden Sie eine Tabelle mit 3 Spalten!

ID, TITLE_EN, TITLE_NL

Es gibt keinen guten Grund, das wirklich zu serialisieren!

    
sebthebert 09.10.2008 19:01
quelle