ФорумРазработкаБазы данных → ЧПУ и структура БД

ЧПУ и структура БД

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 28 августа 2008 г. 16:07

    Возьмем банальный пример — новости. Условие — урл новости должен выглядеть следующим образом:
    http://example.com/news/news-about-something


    Возникает вопрос, какой оптимальный вариант структуры таблицы новостей?

    1. id INT(11) PRIMARY KEY | key VARCHAR(255) UNIQUE | …
    Но если ulr (news-about-something) уникальный, зачем нужен id?

    2. key VARCHAR(255) PRIMARY KEY | …
    То есть используем news-about-something как праймари.

    Но, при мультиязычности придется делать связи, чего не пришлось бы делать в первом варианте, если добавить поле lang.

    3. Еще видел вариант, где участвует и id, и key.
    http://example.com/news/12-news-about-something


    Но это, по сути, первый вариант.

    Вобщем, как лучше? :)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 августа 2008 г. 16:17, спустя 9 минут 53 секунды

    sap, используй первый вариант, так как int дешевле varchar. И при нормализованной структуре БД - получишь заметный выигрыш.
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 28 августа 2008 г. 16:21, спустя 3 минуты 53 секунды

    Но, при мультиязычности придется делать связи, чего не пришлось бы делать в первом варианте, если добавить поле lang.

    Не понял… В любом случае ты можешь делать связи… Но можешь и не делать. Короче, немного недопонял тебя наверное.
    adw/0
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 29 августа 2008 г. 1:11, спустя 8 часов 49 минут 19 секунд


    Но, при мультиязычности придется делать связи, чего не пришлось бы делать в первом варианте, если добавить поле lang.

    Не понял… В любом случае ты можешь делать связи… Но можешь и не делать. Короче, немного недопонял тебя наверное.

    Я о симметричности разных языковых версий. Т.е. чтобы с /ru/news/news-about-something попадать на /en/news/news-about-something и все было ок :)

    id INT(11) PRIMARY KEY | key VARCHAR(255) | lang VARCHAR(2) | …
    SELECT * FROM `table` WHERE `key`="news-about-something" AND `lang`="ru" LIMIT 1

    Только тут придется движком проверять, чтобы не было дублей в паре key | lang.

    Если идет второй вариант, то там вообще запара будет.

    так как int дешевле varchar. И при нормализованной структуре БД - получишь заметный выигрыш.

    Ээ… но запрос ведь все равно идет по варчару. В урле же варчар, инт ид нигде практически не используется.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 29 августа 2008 г. 1:18, спустя 7 минут 28 секунд

    поддерживаю adw0rd'а
    сам сначала сделел вторым вариантом, а когда начал добавлять всякие прикрепленнве файлы каменты и рейтинги понял что ошибся, пришлось все переписывать

    чтобы не было дублей в паре key | lang

    поставь UNIQUE на два поля
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 29 августа 2008 г. 1:39, спустя 20 минут 54 секунды

    поставь UNIQUE на два поля

    o_O не понял, UNIQUE можно поставить на связку полей?

    Ну вобщем, я тоже к первому варианту склоняюсь :)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 29 августа 2008 г. 2:00, спустя 21 минуту 29 секунд

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 29 августа 2008 г. 2:05, спустя 4 минуты 21 секунду

    o_O не понял, UNIQUE можно поставить на связку полей?

    попробуй
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 29 августа 2008 г. 2:12, спустя 7 минут 32 секунды

    О, супер :)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:15, спустя 85 дней 12 часов 2 минуты

    а если у тебя будет юрл длиннее 255 символов? ;)
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:16, спустя 1 минуту

    phpdude, то будет BSOD
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:21, спустя 5 минут 24 секунды

    phpdude, а если больше чем GET позволяет?)
    adw/0
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:47, спустя 25 минут 15 секунд

    adw0rd, это уже обсуждали
    на практике браузеры на много больше чем 1 кило заявленый в спеках
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:49, спустя 2 минуты 45 секунд


    adw0rd, это уже обсуждали
    на практике браузеры на много больше чем 1 кило заявленый в спеках


    я помню, однако ограничение всетаки есть ;)
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 ноября 2008 г. 13:50, спустя 34 секунды

    это да, позволяют значительно больше. ну или простой пример - юрл - кирилическая строка. если кодировка ютф-8, то соответственно из 100 символов русских - 200 ингл)
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!