2 つの都市間の距離に関するデータを保持する必要があるアプリケーションを開発しています。
2 つの都市の名前とそれらの間の距離を保持する Mysql データベースに距離テーブルを作成しました。2 つの町の列を複合主キーにしました。
スクリーンショットに示すように、アプリケーションが重複した逆のエントリを作成しないようにデータベースに制限して、距離の値が異なるのを防ぎたいと思います。
この問題を解決するための最良の解決策は何ですか?
2 つの都市間の距離に関するデータを保持する必要があるアプリケーションを開発しています。
2 つの都市の名前とそれらの間の距離を保持する Mysql データベースに距離テーブルを作成しました。2 つの町の列を複合主キーにしました。
スクリーンショットに示すように、アプリケーションが重複した逆のエントリを作成しないようにデータベースに制限して、距離の値が異なるのを防ぎたいと思います。
この問題を解決するための最良の解決策は何ですか?
このテーブルに挿入するストアド プロシージャを作成できます。
DELIMITER $$
CREATE PROCEDURE insert_distance(IN p_town1 varchar(50), IN p_town2 varchar(50), IN p_distance int)
BEGIN
INSERT INTO distance(town1, town2, distance)
SELECT LEAST(p_town1, p_town2), GREATEST(p_town1, p_town2), p_distance;
END $$
DELIMITER ;
この手順のみを使用して挿入すると、エントリが既に存在する場合にエラーがスローされることを確認できます。また、間違った順序で誤って町を挿入することもありません。