Я пытаюсь создать базу данных (используя PHP и MYSQL с XAMPP), где хранятся сведения о различных ресторанах быстрого питания и их филиалах, а также меню, предлагаемое в их филиалах. Я создал несколько таблиц в моей базе данных, в которых подробно изложены сведения о ресторанах быстрого питания, их филиалах, категории и подкатегориях их меню И элементы, которые они обслуживают в таблицах. Таблицы/примеры таблиц показаны ниже.Как связать несколько таблиц с одним ID
Restaurants
+-------------+----------------+
| RestaurantID| RestaurantName |
+-------------+----------------+
| 1 | PizzaHut |
| 2 | BurgerKing |
| 3 | KFC |
| 4 | SubWay |
+-------------+----------------+
Branches
+---------------+----------------+
| RestaurantName| BranchAddress |
+---------------+----------------+
| KFC | XXX-1234 |
| KFC | AAA-1234 |
| KFC | YYY-1234 |
| BurgerKing | DDD-1234 |
+---------------+----------------+
Categories
+---------------+----------------+
| BranchAddress | Categories |
+---------------+----------------+
| XXX-1234 | Fries |
| AAA-1234 | Burgers |
| YYY-1234 | Drinks |
| DDD-1234 | Burgers |
+---------------+----------------+
SubCategories
+---------------+----------------+
| Categories | SubCategories |
+---------------+----------------+
| Fries | Cheese |
| Burgers | Chicken |
| Drinks | Carbonated |
| Burgers | Beef |
+---------------+----------------+
Items
+---------------+----------------+
| SubCategories | Items |
+---------------+----------------+
| Cheese | CheeseFries |
| Chicken | Zinger |
| Carbonated | Pepsi |
| Beef | Whopper |
+---------------+----------------+
Как можно видеть выше, каждый ресторан может иметь несколько ветвей, каждая из ветвей может иметь несколько категорий, каждая из категорий может иметь несколько подкатегорий, которые затем могут иметь несколько items.Branches могут иметь одинаковые категории и/или подкатегорий, но внутри них есть разные элементы.
Я не думаю, что в этом случае работала бы централизованная таблица категорий, подкатегорий и позиций, так как каждая ветка каждого ресторана представляет собой отдельную отдельную единицу, для которой потребуется собственный набор категорий, подкатегорий и item tables.If так, как мне нужно создавать таблицы, а также настраивать необходимые внешние ключи?
Categories
+----------------+
| Categories |
+----------------+
| Drinks |
| Burgers |
| Fries |
| SetMeals |
+----------------+
SubCategories
+----------------+----------------+
| Category | SubCategories |
+---------------+-----------------+
| Drinks | Carbonated |
| Drinks | Carbonated |
| Drinks | Carbonated |
| Drinks | Non-Carbonated |
| Burgers | Beef |
| Burgers | Beef |
| Burgers | Chicken |
+----------------+----------------+
SubCategories
+----------------+----------------+-------------+
| Category | SubCategories | Items |
+---------------+-----------------+-------------+
| Drinks | Carbonated | Pepsi |
| Drinks | Carbonated | Root Beer |
| Drinks | Carbonated | Cola |
| Drinks | Non-Carbonated | Orange Juice |
| Burgers | Beef | Whopper |
| Burgers | Beef | Cheese Burger|
| Burgers | Chicken | McChicken |
+----------------+----------------+--------------+
Конечно, я мог ошибаться, и централизованные таблицы могут работать в этом сценарии. Если да, могу ли я иметь некоторые примеры и/или указания о том, как продолжить/или начать настройку таблиц?
Я думал следующее решение:
Restaurants
+-------------+----------------+
| RestaurantID| RestaurantName |
+-------------+----------------+
| 1 | PizzaHut |
| 2 | BurgerKing |
| 3 | KFC |
| 4 | SubWay |
+-------------+----------------+
Branches
+---------------+----------------+
| RestaurantName| BranchAddress |
+---------------+----------------+
| KFC | XXX-1234 |
| KFC | AAA-1234 |
| KFC | YYY-1234 |
| BurgerKing | DDD-1234 |
+-------------+------------------+
Categories
+----------------+----------------+----------------+
| RestaurantName | BranchAddress | Category |
+----------------+-----------------+----------------+
| KFC | XXX-1234 | Fries |
| KFC | AAA-1234 | Burgers |
| KFC | YYY-1234 | Drinks |
| BurgerKing | DDD-1234 | Burgers |
+----------------+----------------------------------+
SubCategories
+----------------+----------------+----------------+----------------+
| RestaurantName | BranchAddress | Category | SubCategories |
+----------------+-----------------+---------------+----------------+
| KFC | XXX-1234 | Fries | Cheese |
| KFC | AAA-1234 | Burgers | Chicken |
| KFC | YYY-1234 | Drinks | Carbonated |
| BurgerKing | DDD-1234 | Burgers | Beef |
+----------------+---------------------------------+----------------+
Items
+----------------+----------------+----------------+----------------+-------------+
| RestaurantName | BranchAddress | Category | SubCategories | Items |
+----------------+-----------------+---------------+----------------+-------------+
| KFC | XXX-1234 | Fries | Cheese |CheeseFries |
| KFC | AAA-1234 | Burgers | Chicken |Zinger |
| KFC | YYY-1234 | Drinks | Carbonated |Pepsi |
| BurgerKing | DDD-1234 | Burgers | Beef |Whopper |
+----------------+---------------------------------+----------------+-------------+
Хотя таблицы выше дает каждый ресторан и его филиалы их отдельные категории, подкатегории, товары, он побеждает всю цель расколоть их в первую очередь, и довольно глупо.
EDIT: Я пытался denormalise вышеуказанных таблиц так, чтобы я мог запросить его с помощью
$query="SELECT * FROM Items WHERE Restaurantname='BurgerKing' AND
BranchAddress='XXX-1234' AND Category='Fries';
$result=mysqli_query($cxn,$query) or die("Error");
while($row=mysqli_fetch_assoc)
{
extract($row);
echo "$Item";
}
ПРИМЕЧАНИЯ: Я планирую расширить базу данных, чтобы следующими удобства ресторанов быстрого питания и даже не-F & связанные B магазинов в будущем, так что различные таблицы (Категория/подкатегориях и товары) должны иметь возможность включать категории из неживого F & связанных B магазинов (например, электроника/Книгу и т.д.)
Я прошу прощения за чрезвычайно долгий вопрос и буду благодарен за любые советы и помощь, которые я могу получить.
Спасибо!
Почему вы денормировали его как таковое. почему у вас есть подкатегории по адресу филиала. кто знает, может быть, это законно. что вы имеете в виду, это побеждает всю цель и глупо? – Drew
@ Drew Pierce Я отредактировал свой вопрос, чтобы показать, почему я денормализовал его как таковой. Я просто думаю, что это глупо, потому что вместо того, чтобы денормализировать его как таковое, я мог бы также объединить все в одну огромную таблицу, а затем использовать ее как таблицу Excel , используя такие запросы, как фильтры. Например (SELECT * FROM Item WHERE RestaurantName = 'KFC';) Без необходимости использовать JOINS в моих запросах, хотя выполнение этого как бы приведет к поражению всей цели реляционной базы данных. @ yvytty –