Arrays in MySQL speichern

Rayven Esplanada 11 Dezember 2023
  1. Mock-Arrays als Beziehungen zum Speichern von Arrays in MySQL
  2. Arrays in einem anderen SQL-Datentyp speichern
Arrays in MySQL speichern

Dieses Tutorial zeigt Ihnen, wie Sie Arrays als Feld in MySQL speichern oder simulieren können.

SQL unterstützt Arrays nicht explizit als Datentyp innerhalb der eigenen Sprache, aber es gibt viele Workarounds, um es möglich zu machen, weil es eine relationale Datenbank ist.

Relationale Datenbanken wie SQL arbeiten mit Beziehungen und Schlüsseln. Meistens verwenden wir diese Beziehungen, um mehrere Werte mit einer einzelnen Zeile zu verbinden, auf die sie sich beziehen.

Relationen sind eine entkoppelte Version von Arrays, und es funktioniert gut mit der Natur und dem Design von SQL (siehe normalization). Das ist der Grund, warum es in SQL keinen Array-Datentyp gibt, denn in den meisten Fällen werden Arrays nicht benötigt, weil Relationen existieren.

Arrays in einer Datenbank können gefährlich sein, wenn sie unsachgemäß verwendet oder manipuliert werden. Sie können Ihre Datenbank ohne sie implementieren und haben eine sehr optimierte Datenbank.

Wenn Sie wirklich Arrays speichern wollen oder müssen, finden Sie hier einige Möglichkeiten, wie Sie dies tun können.

Mock-Arrays als Beziehungen zum Speichern von Arrays in MySQL

Wenn wir der Natur und den Konventionen von SQL folgen wollen, dann sollten Arrays als Relationen behandelt werden.

Nehmen wir an, wir haben einen customer, der mehrere order in einem Restaurant hat.

Als erstes erstellen wir die Tabellen customer und order.

CREATE TABLE customer (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);

CREATE TABLE order (
`order_id` INT NOT NULL PRIMARY KEY,
`order` VARCHAR(40),
`price` DOUBLE
);

Der Kunde und seine Bestellungen weisen eine Eins-zu-Viele Beziehung auf; um dies zu implementieren, bräuchten wir eine assoziative Entität, um die beiden Tabellen miteinander zu verbinden.

CREATE TABLE customer_order (
`customer_id` INT NOT NULL,
`order_id` INT NOT NULL,
PRIMARY KEY(`customer_id`, `order_id`)
);

Stellen wir uns vor, dass die Tabellen als solche gefüllt sind:

  • customer
id name
1 John Doe
2 Jane Doe
  • order
order_id order price
1 Scallops 35.00
2 Lobster 120.00
3 Steak 80.00
4 Cheesecake 25.00
  • customer_order
customer_id order_id
1 1
1 2
1 4
2 3
2 4

Aus diesen Tabellen können wir John Doe mit der Bestellung von Jakobsmuscheln, Hummer und Käsekuchen in Beziehung setzen. In der Zwischenzeit hat Jane Doe Steak und Käsekuchen bestellt.

Wenn wir alles abfragen wollen, was John Doe bestellt hat, würden wir einfach eine SELECT JOIN-Abfrage als solche verwenden:

SELECT c.name, o.order
FROM customer c
INNER JOIN customer_order co
ON co.customer_id = c.customer_id
INNER JOIN order o
ON o.order_id = co.order_id
WHERE name = 'John Doe'

Die Abfrage wird dieses Ergebnis erzeugen:

name order
John Doe Scallops
John Doe Lobster
John Doe Cheesecake

Im Wesentlichen sind Relationen die SQL-Versionen von Arrays. Wenn Sie also jemals ein gutes Design beibehalten wollen, sollten Sie das Konzept der Relationen verstehen und sie so oft wie möglich verwenden.

Arrays in einem anderen SQL-Datentyp speichern

Ab dem Update auf MySQL 5.7 unterstützt die Sprache nun JSON als Datentyp. JSON bietet SQL eine bequeme Methode, um komplexe Datentypen wie Arrays, Sets, Maps, Dictionaries und viele mehr zu speichern.

Der schnellste Weg, ein Array in SQL zu spiegeln, ist, es als String zu speichern.

Erstellen Sie die Tabellen customer und order.

CREATE TABLE customer (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50),
`order` VARCHAR(999)
);

CREATE TABLE order (
`id` INT NOT NULL PRIMARY KEY,
`order` VARCHAR(50),
`price` DOUBLE
);

Jedes Mal, wenn ein Kunde eine Bestellung macht, verwenden Sie GROUP_CONCAT(), um einen neuen Eintrag im Feld order des Kunden zu speichern.

UPDATE customer
SET order = CONCAT(order, ', Cheesecake');

UPDATE customer
SET order = CONCAT(order, ', Ravioli');

Wenn Sie den Kunden mit den Bestellungen abfragen, wird das Ergebnis angezeigt:

name order
John Doe ,Cheesecake, Ravioli

Bei dieser Methode handelt es sich im Wesentlichen um einen Array-Typ, der in einer einzigen Spalte gespeichert wird. Dies würde jedoch bedeuten, dass Sie nicht der Konvention einer relationalen Datenbank folgen, was SQL ist.

Dies ist eine effektive Methode, um ein Array in SQL zu speichern. Dennoch wird es als schlechtes Design angesehen, ein Array in eine relationale Datenbank zu zwingen, wenn Sie es einfach in einer neuen Tabelle speichern und die Beziehungen und Einschränkungen konfigurieren können.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn