我想創建一個數據庫(使用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可以具有相同的類別和/或子類別BUT在其中有不同的項目。
我不認爲在這種情況下,集中的類別,子類別和物品表將起作用,因爲每個餐廳的每個分支都是它自己的獨立個體實體,這將需要它自己的一組類別,子類別和項目表。如果是這樣,我該如何創建表以及設置必要的外鍵?
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 |
+----------------+---------------------------------+----------------+-------------+
雖然這些表格中給出了每個餐廳及其分支機構的個人類別,子類別,項目,它違背了擺在首位分裂起來的全部目的,而且很愚蠢。
編輯:我試圖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 –