2015-05-10 4 views
1

Я пытаюсь создать таблицы моей базы данных, чтобы получить route из таблицы routes, зависит от местоположения всадника, и время должно достигнуть текущего времени. Я столкнулся с проблемой, когда я вставил некоторые данные во все таблицы, тогда стоп_ид в routes и arrivalestimes таблицах: NULL? Что-то не так с дизайном базы данных?Ключ forgein имеет значение NULL

Одна остановка имеет много маршрутов. У одного маршрута много остановок. одна остановка имеет много времени прибытия.

Я ценю любую помощь.

CREATE TABLE IF NOT EXISTS stops 
    (stop_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name varchar(30) NOT NULL, 
    lat double(10,6) NOT NULL, 
    longi double(10,6)NOT NULL) 

    INSERT INTO stops(name, lat, longi) values 
     ('ABC', '63.838039', '18.700440'), 
     ('DEF', '63.840642', '18.701246'),    
     ('HIG', '63.868863', '18.665438') 

    CREATE TABLE IF NOT EXISTS arrivaltimes(arrivaltimes_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     weekday VARCHAR(20) NOT NULL, 
     arrivaltime time NOT NULL, 
     stop_id INT, FOREIGN KEY fk_stop_id(stop_id) REFERENCES stops(stop_id)) 

    INSERT INTO arrivaltimes(weekday, arrivaltime) values 
     ('mon-fri', '05:30'), 
     ('mon-fri', '06:07') 

    CREATE TABLE IF NOT EXISTS routes 
    (routes_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    route INT(11) NOT NULL, 
    stop_id INT, FOREIGN KEY fk_stop_id(stop_id) REFERENCES stops(stop_id)) 

    INSERT INTO routes(route) values 
    ('1'), 
    ('9') 
+1

Пожалуйста, избавитесь от 'stt.execute()' wrappers и просто покажите код SQL напрямую. Это было бы намного более читаемым, чем то, что у вас есть сейчас. –

+2

вы должны явно вставить значение внешних ключей, а также другие атрибуты, такие как маршрут в последнем SQL-выражении. – Mahmoud

ответ

2

Обратите внимание: ИНОСТРАННЫЕ КЛЮЧЕВЫЕ ССЫЛКИ не вставляют ничего самостоятельно.

  • ВНЕШНИЙ КЛЮЧ в одном столе указывает на ПЕРВИЧНЫЙ КЛЮЧ в другой таблице.

  • Ограничение FOREIGN KEY предотвращает вхождение недействительных данных в столбец внешнего ключа, поскольку это должно быть одно из значений, содержащихся в таблице, на которую указывает.

Результаты, указанные в результатах, верны. Вы не передали значение stop_id при вставке записей в маршруты и таблицы времени прибытия.

Изменение формулировок вставки должно устранить проблему.

Смежные вопросы