Задавайте вопросы, мы ответим
Вы не зашли.
Здраствуйте.
Ребят, вот, допустим, у меня есть 50 таблиц и в каждой есть поле name, можно как-нибудь использовать поиск по всем таблицам для поля name?
Неактивен
Я не против
Если структура одинаковая — то почему 50 таблиц, а не одна?
Если структура разная — то как должна выглядеть выборка из 50 разных
таблиц? Какую структуру она должна иметь?
Неактивен
Структура разная, но в каждой таблице есть поле name.
Оговорюсь. Вообще-то никаких таблиц еще нет (но будут).
Просто я подумал, что вдруг такое возможно, типа создал еще одну (родительскую) таблицу и привязал ее поле name к полям name других таблиц. Что-то похожее на то, как действует удаление\обновление с FOREIGN KEY, но только для поиска по множеству таблиц
А дальше обращаешься только к родительской таблице, а она ищет по всем сама, на подобии:
SELECT * FROM parent WHERE name = 'что-то';
Такое не возможно сделать?
Отредактированно antone (22.01.2010 00:24:15)
Неактивен
Можете сделать VIEW как SELECT name FROM table1 UNION SELECT name FROM table2, …
Но смысла в этом нет, никаких дополнительных данных Вы получить из такого
представления не сможете. Просто потому что структура таблиц разная.
Аналогия приблизительно такая: у Вас есть таблица-каталог телефонов и словарь русского
языка. И у записей в словаре, и у телефонов есть поле name. Но только человек, нашедший
телефон 7912 хочет увидеть не только «7912», но еще и полезную информацию (тип, цвет,
что там еще у телефонов бывает). А человек, нашедший «дезоксирибонуклеиновая» был бы
не против узнать расшифровку слова. А Вы такой выборкой сможете сказать только «да, есть
такое».
Неактивен
Подскажите, тогда, пожалуйста, как мне спроектировать БД?
Еще раз распишу, дано:
Неопределенное кол-во таблиц (за ранее неизвестно, т.к. в любой момент может добавиться новая).
Пример, таблицы: Сars, Schools, Hospitals - таких разных объектов (таблиц) может быть много.
Т.к. структура у этих таблиц в большинстве случаев разная (у кого-то есть цена, у кого адрес сайта и т.п.), следовательно, я не могу (наверное?) запихать все это в одну большую таблицу. Придеться делать много разных таблиц.
Но как тогда осуществить банальный поиск по ним? Если на сайте есть форма поиска, и человек введет, например: "Аптеки", как мне определить в какой таблице это искать?
Пока у меня один вариант:
Делаю одну главную таблицу (base) с полями
id - её айди
keyword - ключевое слово, по которому искать
name_table - название таблицы, в которой нужно искать объект
id_name_table - айди таблицы (name_table)
Примерный вид.
+----+----------+--------------+-----------------+
| id | keyword | name_table | id_name_table |
+----+----------+--------------+-----------------+
| 1 | Star | Shops | 1 |
| 2 | Space | Shops | 2 |
| 3 | Audi | Cars | 7 |
+----+---------+---------------+-----------------+
Ну и понятно, сначала делаем один запрос к основной таблице (base), если есть совпадение, тогда берем название и айди этой таблицы (поля name_table, id_name_table) и находим в ней нужный объект.
Плюсы:
Все достаточно просто, и очень легко добавить новую таблицу
Минусы:
Надо делать 2 запроса как минимум, и геморой наверное будет не большой если совпадений будет больше одного.
В общем, проблему с поиском я расписал, хотел бы услышать, такой (мой) способ приемлемый? Может предложите как можно сделать более правильно и грамотно?
Неактивен
Сделайте одну таблицу с общими для всех типов данных полями и BLOB для всего остального —
если искать будете только по имени. Если по содержимому BLOBа, то несколько таблиц и несколько
запросов, да.
Неактивен
Извините, я плохо знаю mysql и не совсем понятно как использовать blob для всего остального.
Создать таблицу с общими полями + 1 столбец с типом blob и туда пихать все различные характеристики?
Неактивен
Если вы будете дробиться на множество таблиц, а потом искать варианты их объединения, то в лучшем случае просто запутаетесь, а в худшем - ничего не будет работать.
Уходите от универсальности в конкретику.
Чтобы было понятно: вместо одного универсального поля ПОИСК сделайте несколько, например, ПОИСК ПО АПТЕКАМ, ПОИСК ЗАПЧАСТЕЙ или по меню разбейте сайт на разделы. Понятно что в разделе Аптеки глупо искать бензонасос.
И вам будет жить проще и людям не придется долго объяснять, что в поле ПОИСК можно искать все, потому как наш человек сразу будет искать порно, девочеки т.д. ... ну так, для проверки
А если серьезно ...
В любом случае вы не сможете предусмотреть, а значит написать обработку, ВСЕХ вариантов запросов, которые будут вводить в универсальное поле поиска любимые пользователи
Неактивен