Übersicht
Wir haben hier ein Problem, dass wir nicht wollen, die Datensätze vollständig zufällig sein (zum Beispiel Kapitän etaoin Asdfsdasdf auf 13-09-1045 verlassen). Wir werden daher FLNum als Integer, Primärschlüssel, auto_increment in MySQL deklarieren und vielleicht die Tabellendefinition so ändern, dass sie bei 1000000 statt bei 1 beginnt (nur um alle Nummern mit mehr oder weniger derselben Anzahl an Ziffern zu haben). Aber das sind kleine Kartoffeln.
Dann wollen wir das Abfahrtsdatum in einem bestimmten Bereich, und das gleiche für die Schwanznummer und die Kapitäne und ersten Offiziere.
Wir beginnen also, die Kardinalität unserer Tabellen zu schätzen. Wir wollen hunderttausend Flüge, es scheint vernünftig, dies mit eintausend Flugzeugen zu machen, also sagen wir zweihundert Kapitäne und so viele Erste Offiziere.
Wir brauchen dann eine Hilfstabelle ("Seed") mit Namen und Nachnamen, und wir können es auf GitHub finden. Wir werden eine XName- und eine XSurname-Tabelle erstellen.
Kapitäne und Erste Offiziere
Wir wollen 200 Kapitäne, so mehr oder weniger:
INSERT INTO Captains (`name`,`surname`)
SELECT `name`, `surname` FROM XNames JOIN XSurnames
ORDER BY RAND() LIMIT 200;
Die oben wird wahrscheinlich eine lange Zeit erfordern, wenn RAN gegen einen Namen/Nachnamen Tabelle auszuführen die Zehntausende, so möchten Sie vielleicht zunächst mit zwei temporäre Tabellen erstellen, sagen wir, zweihundert Namen und zweihundert Namen von
CREATE TEMPORARY TABLE tbl1 AS
SELECT * FROM XSurnames
ORDER BY RAND() LIMIT 200;
läuft
und dann verbinden Sie die beiden temporären Tabellen (200 * 200 ergibt 40000, was hilft, vollständig doppelte Namen niedrig zu halten. Sie werden dann aus diesen 40k 200 Einträge auswählen.
Abreisedaten
Wir schaffen eine neue Tabelle DepartureDates mit nur einer Spalte, Abreisedatum. Dann fügen wir ein einzelnes Datum ein.
INSERT INTO DepartureDates (DepartureDate) VALUES ('2017-12-01');
Dann legen wir den Tag nach:
INSERT INTO DepartureDates
SELECT DATE_ADD(DepartureDate, INTERVAL 1 DAY) FROM DepartureDates;
Es gibt jetzt 2 Tage, in der Tabelle (nennen wir sie 0 und 1). Der folgende Befehl wird dann wählen 0 und 1, und fügen Sie 2 und 3:
INSERT INTO DepartureDates
SELECT DATE_ADD(DepartureDate, INTERVAL 2 DAY) FROM DepartureDates;
Ausführen den Befehl erneut mit INTERVAL 4 DAY werden weitere vier Reisedaten ein. Mit dem vierten Befehl und 8 TAG geben wir weitere 8 Daten ein und haben jetzt 16 Tage. Der fünfte Befehl bringt die Summe auf zweiunddreißig Tage. Mit nur acht Befehlen können Sie Daten für viele Monate eingeben.
Flüge
Nachdem Sie nun die Daten und die Flüge (andere Daten wie Flughäfen ist ähnlich) haben, laufen Sie Eingabe:
CREATE PROCEDURE populate()
BEGIN
DECLARE i int DEFAULT 1;
WHILE i <= 100000 DO
INSERT INTO flights (`date`, `cid`, `fid`, whatever)
VALUES (
(SELECT DepartureDate FROM DepartureDates ORDER BY RAND() LIMIT 1) AS `date`,
(SELECT cid FROM Captains ORDER BY RAND() LIMIT 1) AS cid,
(SELECT cid FROM FirstOfficers ORDER BY RAND() LIMIT 1) AS fid,
... et cetera ...
);
SET i = i + 1;
END WHILE;
END
Dann CALL populate();
wird (nach einer ganzen Weile) erhalten Sie die erforderlichen Daten. Das Autoinkrement kümmert sich um FLNum.
===
(Oder wenn Sie ein Skript in bash
, PHP, Perl oder Python laufen kann, kann ich Ihnen einen einfacheren Generator schreiben)
Was genau ist Ihre Schwierigkeiten? Kannst du nicht einfach Flugnummern erfinden? – LSerni
würde ich aber leider, es muss 100000 Datensätze –
Okay sein. Beginnen Sie damit, die Struktur der Flights-Tabellen zu zeigen, und welche Optionen es für die verschiedenen Spalten gibt (ich stelle mir Dinge wie STD, Carrier, FromAirport = NYC oder ToAirport = FCO vor). Sie können dies in SQL möglicherweise tun oder auch nicht, also - welche Skriptsprachen kennen Sie, wenn überhaupt? – LSerni