Задать вопрос
Ответы пользователя по тегу Проектирование баз данных
  • Как сделать составной внешний ключ?

    mahoho
    @mahoho
    Full stack certified PHP developer.
    Указанная вами схема не может быть реализована через FOREIGN KEY, можно через триггеры на таблицах "родителей". Либо я бы рекомендовал поместить всех родителей и их типы (если я все правильно понял и это их типы) в одну таблицу с примерно такой схемой:

    CREATE TABLE trasports (
    id INT UNSIGNED NOT NULL,
    type INT UNSIGNED NOT NULL,
    
    PRIMARY KEY (id, type)
    FOREIGN KEY (type) REFERENCES transport_type (id)
    );

    И внешний ключ в user_transport делать по двум полям:
    ALTER TABLE user_transport ADD FOREIGN KEY (transport_type, transport_id) REFERENCES trasports (type, id) ON UPDATE CASCADE;

    e55c0a54afd64dbe8850965b0911d345.png
    Ответ написан
  • Какую БД выбрать?

    mahoho
    @mahoho
    Full stack certified PHP developer.
    OR vchar4 LIKE "%searchtext%"

    Вот из-за этого у вас работает долго - wildcard '%' в начале аргумента для LIKE предотвращает использование индекса. Попробуйте реализовать поиск этому полю другим образом, например полнотекстовым индексом. Кроме того, индексы не работают для поиске по enum полю из-за специфики из хранения (dev.mysql.com/doc/refman/5.6/en/enum.html). Попробуйте вместо enum сделать обычные текстовые поля с обычными индексами - это увеличит объем хранилища, но значительно ускорит SELECT'ы.
    Ответ написан
    Комментировать