我得到了一个大学项目,我必须创建一个有一些选择的数据库。我选择为航班预订系统创建一个数据库。这是非常基本的。
但是,我正在插入虚拟数据,对于其中一个列,FlightNumber,我将需要它对于多个输入是相同的。有没有办法做到这一点。我还需要在其他表中包含值。
例如,FLNum是航班的主要钥匙,是乘客的外键。有没有可以做到这一点的网站?
更新:需要100000条记录
表:乘客
BookRef (PK)
Fname
Lname
Gender
Date_Depart
Date_Return
FLNum (FK)
表:航班
FLNum (PK)
Date_Depart
Tail_No
CID (FK)
FID (FK)
表:船长
CID (PK)
Fname
Lname
表:First_Officers
FID (PK)
Fname
Lname
乘客的样本价值:
BookRef (PK) 4MTH2R
Fname Hortense
Lname Jacqueminot
Gender Female
Date_Depart 2017-12-26
Date_Return 2017-12-31
FLNum (FK) KQU59GS
答案 0 :(得分:1)
我们在这里遇到一个问题,我们不希望记录完全随机(例如Etaoin Asdfsdasdf船长于13-09-1045离开)。因此,我们将在Linux中将FLNum声明为整数,主键,auto_increment,并且可能将表定义更改为从1000000而不是1开始(只是为了使所有数字具有或多或少相同的数字位数)。但这是小土豆。
然后我们想要一个给定范围内的出发日期,以及尾号和船长以及第一官员的相同事情。
所以我们开始估算表格的基数。我们想要十万个航班,用一千架飞机做这件事似乎是合理的,这意味着让我们说两百名船长和多少副驾驶。
然后我们需要一个带有姓名和姓氏的辅助("种子")表格,我们可以在GitHub找到它。我们将构建一个XName和一个XSurname表。
我们想要200个船长,所以或多或少:
INSERT INTO Captains (`name`,`surname`)
SELECT `name`, `surname` FROM XNames JOIN XSurnames
ORDER BY RAND() LIMIT 200;
如果针对名称/姓氏表运行成千上万,那么上面可能需要长时间才能运行,所以你可能想先创建两个临时表,比如说200个姓名和运行
的200个姓氏CREATE TEMPORARY TABLE tbl1 AS
SELECT * FROM XSurnames
ORDER BY RAND() LIMIT 200;
然后加入两个临时表(200 * 200给出40000,这有助于保持完全重复的名称低。然后您将从这些40k中选择200个条目)。
我们创建一个新表DepartureDates只有一列DepartureDate。然后我们插入一个日期。
INSERT INTO DepartureDates (DepartureDate) VALUES ('2017-12-01');
然后我们插入后一天:
INSERT INTO DepartureDates
SELECT DATE_ADD(DepartureDate, INTERVAL 1 DAY) FROM DepartureDates;
表格中现在有2个日期(让他们称之为0和1)。然后,下面的命令将选择0和1并添加2和3:
INSERT INTO DepartureDates
SELECT DATE_ADD(DepartureDate, INTERVAL 2 DAY) FROM DepartureDates;
使用INTERVAL 4 DAY再次运行命令将进入其他四个日期。使用第四个命令和8天,我们输入其他8个日期,现在有16天。第五个命令总共三十二天。只需八个命令,您就可以输入几个月的时间。值得约会。
现在你有日期和航班(其他数据,如机场类似),你运行输入:
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
然后,CALL populate();
将(经过很长一段时间)获得所需的数据。自动增量将处理FLNum。
===
(或者如果您可以在bash
,PHP,Perl或python中运行脚本,我可以为您编写一个更简单的生成器)
答案 1 :(得分:0)
您可以使用this PHP库。这个PHP库可以为您生成虚假数据。