Я хочу, чтобы его именем был адрес страницы. Например, если страница имеет заголовок «Некоторая страница», то ее адрес должен быть http://somesite/some_page/.
"some_page" - имя, сгенерированное системой автоматически. «some_page» - это уникальный идентификатор страницы. Проблема в том, что пользователь в будущем может ввести имя, которое уже существует, что приведет к ошибке.
Для больших объемов данных необходимо найти оптимальный вариант решения проблемы.
Я решил проблему следующим образом:
Идентификатор страницы в базе данных - это имя страницы и суффикс, который по умолчанию равен нулю. При добавлении страницы происходит проверка на существование. Если такой страницы не существует, суффикс будет равен 0, а его имя будет «some_page», если страница существует, тогда - найдите максимальное количество суффикса и суффикс = суффикс + 1, а имя страницы станет «some_page_1».
Для этого я создаю в базе данных составной ключ из полей «суффикс» и «имя_страницы»:
Table Pages
suffix|pageName |pageTitle
0 |some_page |Some Page
1 |some_page |Some Page
0 |other_page|Other Page
Добавление страниц происходит через хранимую процедуру:
CREATE PROCEDURE addPage (pageNameVal VARCHAR(100), pageTitleVal VARCHAR(100))
BEGIN
DECLARE v INT DEFAULT 0;
SELECT MAX(suffix) FROM pages WHERE pageName=pageNameVal INTO v;
IF v >= 0 THEN
SET v = v + 1;
ELSE
SET v = 0;
END IF;
INSERT INTO pages (suffix, pageName) VALUES (pageNameVal, v, pageTitleVal);
END;
Есть ли еще лучшие решения?