2015-04-14 9 views
0

У меня есть таблица членов следующим образом:Обновление первичного ключа путем обновления внешнего ключа

члены Таблица:

Name    |   Handicap 
Joe Bloggs  |    18 

Stableford Таблица:

Player_name |  Player Handicap | Score | Handicap Change 
    Joe Bloggs |   18   |  38 |   17 

Теперь я хочу, чтобы обновить игрока Фора с изменением гандикапа (17), но я получаю сообщение об ошибке:

cannot update a child row.

Player Handicap является ИНОСТРАННЫМ КЛЮЧОМ в таблице Stableford. Это REFERENCES member(handicap).

Когда я обновляю поле Player Handicap в таблице Stableford, я также хочу, чтобы поле гандикапа в моей таблице членов обновлялось. Это возможно?

+0

Вы можете изменить определение FK? –

+0

Да, я могу изменить определение FK – hankey39

+1

Я удалил свой ответ, потому что я неправильно понял вопрос (извините за это). Что именно вы пытаетесь достичь? Очевидно, что вы не используете внешние ключи для традиционной цели инструмента (обеспечивайте целостность данных). Если вы хотите денормализовать свои данные, чтобы вам не приходилось использовать объединения таблиц, и вы считали, что внешние ключи будут синхронизировать данные для вас, я должен сказать, что это невозможно. Просто используйте реляционные базы данных как задуманные и * join * таблицы столько, сколько необходимо. –

ответ

2

Вы не хотите этого делать вообще.

У вас здесь классическая денормализация.

Не имеет никакого смысла иметь гандикап в качестве внешнего ключа. Имеет смысл иметь самого игрока как внешний ключ.

Вы должны избавиться от полей Гандикапа из таблицы Stableford, и получить его из таблицы-членов через имени члена в качестве внешнего ключа, с помощью объединения, когда это необходимо.

Вы делаете не хотите повторить любые атрибуты члена, кроме его ключа, в любой другой таблице.

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