За последние 24 часа нас посетили 97210 программистов и 2681 робот. Сейчас ищут 1473 программиста ...

Первичный ключ

Тема в разделе "PHP для новичков", создана пользователем Nikolai_, 3 дек 2010.

  1. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Есть галерея. В нее пользователи могут заливать фото. Залитый файл переименовывается - ему присваивается номер по порядку, просто цифра: 1, 2, 3 ... 20 ... 45. В таблицу photos эта цифра записывается в столбец name.

    Скажите, нужен ли в таблице дополнительный столбец id_photo auto_increment с первичным ключом? Или оставить первичный ключ в столбце name?

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

    Хотелось бы услышать мнение более опытных коллег по этому поводу.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    э

    мое такое мнение, что этот номер у тебя и должен был быть изначально этим самым автоинкрементным. ты его, что руками накручиваешь? а одновременно две фотки с одним именем не боишься заиметь?
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    имхо не нужен тут никакой суррогатный ключ. Есть id primary auto_increment от него и плясать. пусть он и будет именем если так хочется. Используй его в качестве name.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а если фоток ожидается что будет много, я бы еще рандомные папки ввел =)
     
  5. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Номер скрипт задает. Фото загружается во временную папку, скрипт считывает имена всех фото в папке (а они из цифр), выделяет максимальный номер, добавляет единицу и после проверки типа и расширения копирует файл из временной папки к остальным фото и присваивает ему новый вычисленный номер. Вот как-то так... Повторов не будет - все номера уникальны и идут по порядку.
     
  6. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Я тоже к этому склоняюсь. Собственно, хотел только убедиться в правильности своего выбора.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вобще по-тупому генерил 64 чтоли символа имя рандомно. и хер забить на id, все равно не повторится никогда.
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    igordata Тоже по тупому генерил, только не 64, а 20 символов. Хватало) Но по id можно с другими таблицами связать))))
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а id уже как раз автоикр в строке в бд.
    id, file name, original file name, mime type, description и др
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Хм... А точно не повторится? А вдруг :)))
    Я генерил рандомную строку, проверял, есть ли такая, если есть - генерил новую и снова проверял (в цикле, и так до тех пор пока не сгенерируется строка, которой ещё нет), ну а если нет такой - возвращал её.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    (о_О) повториться может конечно... если брать от души то 36 в 64 степени это БОЛЬШОЕ число... оно даже в 20й не малое.
     
  12. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Коллеги, как думаете имя новому файлу - номер по порядку - задавать скриптом как я в 5-м посте расписал или создавать запись в таблице photos, а потом присваивать загруженному фото id этой записи?

    Что лучше?
     
  13. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Я бы сначала в базу добавлял, потом файл аплоадил. Если какие-то проблемы - по id из базы мочу))))