2013-06-11 7 views
8

Meine Kenntnisse von relationalen Datenbanken ist begrenzt, aber gibt es einen SQL-Befehl, der verwendet werden kann, um eine Spalte zu erstellen, die einen Satz in jeder Zeile enthält?Festlegen Datentyp in mySQL

Ich versuche, eine Tabelle mit 2 Spalten zu erstellen. 1 für spezifische IDs und eine 2 für Sätze, die diesen IDs entsprechen.

Ich las über

http://dev.mysql.com/doc/refman/5.1/en/set.html

erfordert jedoch die eingestellte Datentyp, dass Sie wissen, welche Artikel im Satz sein kann. Ich möchte jedoch nur eine Liste mit variablen Nummern, die sich nicht wiederholen.

+2

Das wollen Sie nicht, schauen Sie sich [Datenbanknormalisierung] (http://en.wikipedia.org/wiki/Database_normalization) an, wahrscheinlich wollen Sie eine zweite Tabelle mit '(id, value)', wo Ein 2. (3., 4., ..) Wert wäre eine _new_ Reihe mit der gleichen 'ID' und der neue/andere 'Wert'. – Wrikken

Antwort

13

Es wäre viel besser, dass die Liste der Elemente als mehrere Zeilen in einer zweiten Tabelle zu erstellen. Dann könnten Sie so viele Elemente in der Liste haben Sie wollen, können Sie sie sortieren könnte, für einen bestimmten Artikel suchen, stellen Sie sicher, sie sind einzigartig, usw.

Siehe auch meine Antwort auf Is storing a delimited list in a database column really that bad?

+0

Würde das bedeuten, dass ich für jede Liste eine separate Tabelle erstellen müsste? Daher würde ich entweder einen anderen Namen für jede der Listentabellen benötigen? – Andy

+0

Ja. Denken Sie an diese Analogie: Sie würden auch einen anderen Variablennamen für jeden Wert oder jedes Array benötigen, die Sie im Anwendungscode verwenden! :-) –

1

Nein, es gibt kein MySQL-Datentyp für beliebige Mengen. Sie können eine Zeichenfolge verwenden, die eine durch Kommas getrennte Liste enthält. Es gibt Funktionen wie FIND_IN_SET(), die mit solchen Werten arbeiten.

Aber das ist ein schlechtes Datenbank-Design. Wenn Sie eine offene Liste haben, sollten Sie sie in einer Tabelle mit einer Zeile pro Wert speichern. Dadurch können sie indexiert werden, wodurch die Suche schneller wird.

0

"SET" -Datentyp wird hier keine gute Wahl sein.
Sie können "VARCHAR" verwenden und die Werte im CSV-Format speichern. Sie behandeln sie auf Anwendungsebene.
Beispiel: INSERT in my_table (id, myset) Werte (1, "3,4,7");

+0

Ich würde niemals vorschlagen, dass jemand eine getrennte Liste in einer Datenbankspalte speichert. Siehe die Antwort von @BillKarwin oben. Und siehe seinen anderen Beitrag: http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574#3653574 – ajon

Verwandte Themen