Как лучше сохранять записи (через связку или нет)?

Тема в разделе "Базы данных", создана пользователем danneo, 10 апр 2014.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    MySQL + php.
    Пользователь добавляет автомобиль на сайт. Авто имеет свою таблицу в БД. Сначала добавляет свое такси (фирму), а далее привязывает определенную свою машину к определенной своей фирме.
    Но... может же быть, что одна и та же машина работает в двух фирмах?
    Соответственно, можно сохранять в поле id_firm несколько значений фирм - 1,2,3 и т.д.
    Также можно добавлять на одну фирму отдельную машину, независимо, одна и та же или нет. Так проще всего для меня :), но для пользователя чуть "напряжнее".
    А можно через еще одну таблицу-связку, например, tb_auto_firm (id, id_firm, id_auto). Вроде как так правильнее. Но мне кажется, лишний труд.
    Как можно определить какой вариант будет лучше?
     
  2. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    с точки зрения классического проектирования БД то да, промежуточная таблица

    в зависимости однако от нагрузки вы можете сделать поле типа SET и класть туда ИД фирм, но имхо с промежуточной таблицей при большом кол-ве записей выборка будет быстрее
     
    danneo, DesoTTo и dwarf нравится это.
  3. tinku

    tinku Создатель

    Регистр.:
    18 сен 2013
    Сообщения:
    31
    Симпатии:
    4
    Абсолютно согласен с предыдущим оратором. Только еще желательно связи сделать.
     
  4. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    Если ві имели в виду внешние ключи то да, конечно. Связь между полями тут логически предполагается
     
  5. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    ну классика же, + уникальный ключ на (id_firm, id_auto), id - автоинкремент. и абсолютно не лишний труд. скажем, Кохана на таких таблицах и строит множественные связи, причём в обе стороны, как по машине, которая принадлежит многим фирмам, так и фирме у которой может быть много машин
     
    SilverGhost и Rollo нравится это.
  6. tinku

    tinku Создатель

    Регистр.:
    18 сен 2013
    Сообщения:
    31
    Симпатии:
    4
    Да, именно их. Логически-то предполагаются, а вот делаются они не всегда. Потом разбирать бардак за такими "спецами" не люблю..
     
  7. Rollo

    Rollo Постоялец

    Регистр.:
    28 сен 2012
    Сообщения:
    53
    Симпатии:
    20
    иногда девы их не делают для того чтобы на черновую внести данные для тестов. их консистентность не так важна,
    важно не забыть добавить их потом
    также, поддержка Foreign keys пригружает базу на больших объемах insert. не так чтоб очень, но эффект есть, я натыкался на статью где люди тестили с/без какое-то время назад, разница в несколько % на более-менее адекватных схемах при адекватных объемах данных
    это может быть важно на сервере с уровнем загрузки под потолок, в остальных случаях...
     
  8. tinku

    tinku Создатель

    Регистр.:
    18 сен 2013
    Сообщения:
    31
    Симпатии:
    4
    Может быть. Не знаю. Я для себя даже в черновых вариантах делаю ключи, во-первых, сразу видно что, где и как работает, а во-вторых, точно не забуду потом ничего.
    А гнаться за %%, вот этого я точно не понимаю. Забить на целостность базы ради, пусть даже, 3%? Экономически нецелесообразно. Да и при таком раскладе в коде необходимо делать дополнительные проверки которые съедят значительно больше.
     
    Rollo нравится это.