Получил свою первую идею проекта, я на правильном пути?

#php #mysql #project

#php #mysql #проект

Вопрос:

Мне 14 лет, и я сам учу PHP. Я собираюсь создать базу данных запчастей для магазина по ремонту газонокосилок моего отца.

Каждая газонокосилка имеет «OEM» номера, но OEM-запчасти стоят дорого. У моего отца есть поставщики, которые производят детали, совместимые с этими OEM-деталями, и в конце каталогов есть таблицы OEM с номером детали в каталогах

Я хочу иметь возможность вводить номер OEM в поле поиска, а затем выводить каждый совместимый номер детали каталога вместе с тем, из какого каталога он взят… Надеюсь, это понятно.

Прямо сейчас я извлек данные из каталогов и имею 6 таблиц базы данных, подобных этой

 id    |    oem     |     partnumber
------ ------------ ----------------------
      |            |
 

Имя таблицы — это имя каталога.

У меня есть небольшой опыт программирования (некоторое время играл с arduinos и raspberry pi), поэтому у меня есть немного знаний, но я никогда ничего не делал с базами данных. Я также знаю html и css и немного javascript.

Я вижу это как шаги:

  1. получите номер OEM из поля поиска.
  2. найдите OEM в каждой таблице
  3. Если есть совпадение, верните номер детали и каталог
  4. если нет совпадения, отобразите «ничего не найдено»

Я вроде как понимаю это в своей голове, но я полностью запутался в поиске по многим таблицам с 1 запросом…. Я не могу сделать это с помощью «одного» запроса, потому что мне нужно, чтобы имя каталога (имя таблицы) тоже возвращалось … простым вариантом было бы создать 1 таблицу, но я хочу обновить это в будущем, и это сделало бы это очень сложным.

Я думаю, что мне нужно задать имена таблиц в виде массива и выполнить цикл по массиву, выполнив запрос, но я не могу понять, как я это сделаю???

Как именно вы бы это сделали?

Я делаю это неправильно?

Я мог бы выполнить много запросов, я думаю, но меня всегда учили, что повторение кода обычно означает, что вы делаете это неправильно, поэтому я не хочу этого делать. Я хочу учиться правильно…

большое спасибо

Комментарии:

1. Почему бы просто не иметь одну таблицу и добавить catalog_id столбец? А затем еще одна таблица с информацией каталога, связанной с таблицей номеров деталей?

2. Осторожно — похоже, вы создали таблицу для каждого каталога, а не просто реляционную структуру, где у вас есть 1 таблица каталогов и 1 таблица деталей, где у деталей есть поле для идентификатора каталога.

3. ^ Точно, я предлагаю вам разработать ее на бумаге, а затем реализовать. У вас должна быть таблица для каждого реального объекта (например, ITEM). Плюс, если нужна таблица для многих отношений

4. Удачи, сынок! Папа гордится тобой

Ответ №1:

Вы на правильном пути. Возможно, вы захотите сделать так называемую нормализацию в мире баз данных. По сути, это означает, что если у вас есть что-то, что является ссылочным, например, OEM, Каталог и т. Д., Вы можете перенести это в отдельную таблицу, а затем вы можете ссылаться на его идентификатор, а не на значение, и таким образом избежать дублирования.

SQL создан для такого рода запросов (если вам интересно, вам следует взглянуть на логику на основе наборов и диаграммы Венна, которые помогут понять sql).

Итак, у вас может быть запрос, который выглядит следующим образом

 SELECT 
  p.PartNumber,
  p.Price,
  c.Name
FROM 
  Parts p
INNER JOIN
  OEM oem
ON
  p.OEMId = oem.id
INNER JOIN
  Catalog c
ON
 c.Id = oem.CatalogId
WHERE
  oem.slug = 'OEM123ABC'
 

Ответ №2:

Вы делаете это неправильно. Поместите имя каталога в таблицу, если это все, что нужно. Тогда вы можете выполнить SQL-запрос, например:

 SELECT part_number FROM table_name WHERE catalog='catalog_name' AND oem='search_term';
 

Убедитесь, что установили соответствующие индексы.