2017-11-19 2 views
0

Ich hoffe, ich erkläre das gut.Brauchen Sie Hilfe beim Einfügen von Dummy-Daten in MySQL

Grundsätzlich habe ich ein College-Projekt gegeben, wo ich eine Datenbank mit einigen Möglichkeiten erstellen muss. Ich habe ausgewählt, eine Datenbank für ein Flugbuchungssystem zu erstellen. Es ist sehr einfach.

Ich füge jedoch Dummy-Daten und für eine der Spalten, FlightNumber, ich brauche es für mehr als eine Eingabe identisch sein. Gibt es einen Weg dies zu tun? Ich muss auch die Werte in anderen Tabellen haben.

Zum Beispiel ist FLNum ein Primärschlüssel in Flügen und ist ein Fremdschlüssel bei Passagieren. Gibt es Websites, die das können?

Vielen Dank im Voraus.

Update: Braucht 100000 Datensätze

Tabelle sein: Passagiere

BookRef (PK) 
Fname 
Lname 
Gender 
Date_Depart 
Date_Return 
FLNum (FK) 

Tabelle: Flüge

FLNum (PK) 
Date_Depart 
Tail_No 
CID (FK) 
FID (FK) 

Tabelle: Captains

CID (PK) 
Fname 
Lname 

Tabelle: First_Officers

FID (PK) 
Fname 
Lname 

Beispielwert für die Passagiere:

BookRef (PK) 4MTH2R 
Fname Hortense 
Lname Jacqueminot 
Gender Female 
Date_Depart 2017-12-26 
Date_Return 2017-12-31 
FLNum (FK) KQU59GS 
+0

Was genau ist Ihre Schwierigkeiten? Kannst du nicht einfach Flugnummern erfinden? – LSerni

+0

würde ich aber leider, es muss 100000 Datensätze –

+0

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

Antwort

0

können Sie this PHP library.This PHP-Bibliothek verwenden können, für Sie gefälschte Daten generieren.

1

Ü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)

Verwandte Themen