[英]DB Schema for Dynamic Categories
添加了更新#1 。 請在問題的最后檢查。 謝謝。
朋友們,
我正在設計一個產品清單,其中包含與類別相關的類別和過濾器。 我目前有一個帶有靜態類別的數據庫模式。 我必須使它們充滿活力。 我無法找到正確的架構使其動態化,因此我在表單中對架構進行了硬編碼。 我的詳細工作如下。
主要產品表是所有產品的索引,每個類別的產品都有單獨的字段。 例如,考慮一輛自行車和一台電視。 這兩個產品共享產品表中的常見字段:
當涉及到該類別時,它還有一些額外的領域。 所以,自行車屬於汽車類,它有以下領域:
對於電視產品,它有自己的類別,電視,其中的字段是:
目前我的數據庫結構如下:
DESC `Products`;
+------------+--------------+------+-----+---------+----------------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+------------+--------------+------+-----+---------+----------------+
| Product ID | int(11) | NO | PRI | (null) | auto_increment |
| Name | varchar(255) | YES | | (null) | |
| Price | int(11) | YES | | (null) | |
| Photo | varchar(255) | YES | | (null) | |
| Category | int(11) | YES | | (null) | |
+------------+--------------+------+-----+---------+----------------+
類別字段如下:
DESC `television`;
+---------------+--------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+---------------+--------------+------+-----+---------+-------+
| Product ID | int(11) | YES | | (null) | |
| Dimensions | varchar(25) | YES | | (null) | |
| Video Type | varchar(255) | YES | | (null) | |
| Response Time | varchar(25) | YES | | (null) | |
| Input Options | text | YES | | (null) | |
+---------------+--------------+------+-----+---------+-------+
DESC `automobiles`;
+-------------+--------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------------+--------------+------+-----+---------+-------+
| Product ID | int(11) | YES | | (null) | |
| Mileage | int(11) | YES | | (null) | |
| Engine Type | varchar(255) | YES | | (null) | |
| Seater | int(11) | YES | | (null) | |
| Fuel | varchar(255) | YES | | (null) | |
+-------------+--------------+------+-----+---------+-------+
當我將數據插入數據庫時,我使用這種方式:
INSERT INTO `television`
(`Product ID`, `Dimensions`, `Video Type`, `Response Time`, `Input Options`)
VALUES
(1, 100, 'hd', 2, 'hd');
INSERT INTO `automobiles`
(`Product ID`, `Mileage`, `Engine Type`, `Seater`, `Fuel`)
VALUES
(1, 100, 'hd', 2, 'hd');
對於靜態類別集合似乎沒問題,我使用如下的簡單形式。
電視
<form action="new.php">
<ul>
<li>
<label>Name</label>
<input type="text" />
</li>
<li>
<label>Price</label>
<input type="text" />
</li>
<li>
<label>Photo</label>
<input type="text" />
</li>
<li>
<label>Category</label>
<input type="text" />
</li>
<li>
<label>Dimensions</label>
<input type="text" />
</li>
<li>
<label>Video Type</label>
<input type="text" />
</li>
<li>
<label>Response Time</label>
<input type="text" />
</li>
<li>
<label>Input Options</label>
<input type="text" />
</li>
<li>
<input type="submit" />
</li>
</ul>
</form>
汽車
<form action="new.php">
<ul>
<li>
<label>Name</label>
<input type="text" />
</li>
<li>
<label>Price</label>
<input type="text" />
</li>
<li>
<label>Photo</label>
<input type="text" />
</li>
<li>
<label>Category</label>
<input type="text" />
</li>
<li>
<label>Mileage</label>
<input type="text" />
</li>
<li>
<label>Engine Type</label>
<input type="text" />
</li>
<li>
<label>Seater</label>
<input type="text" />
</li>
<li>
<label>Fuel</label>
<input type="text" />
</li>
<li>
<input type="submit" />
</li>
</ul>
</form>
現在表單數據很簡單。 我只是使用表的結構插入數據庫。 我現在面臨的問題是,如果這些類別應該是動態的呢? 我該如何更改數據庫架構以使其動態化?
好的,讓我來定義一下我對動態的看法。 當管理員想要添加新類別時,我目前所做的是,為類別創建新表單,轉到phpMyAdmin並添加新表,並再次添加相同的插入查詢和新文件。 我想通過僅使用PHP的管理面板來完成此操作。 這可行嗎? 我應該做什么樣的架構更改?
首先。 謝謝! 現在我以這種方式即興創作了我的桌子。 現在我有四張桌子。
Product ID
, Attribute ID
及其值的關聯。 現在,好吧,我正在努力。 這很有希望。 等待答案,同時,也要更新我的工作! :) 謝謝。
我認為您需要更改數據庫架構。 在這里,我可以看到這些類別是具有第n級別的其他父類別的子類。 而且子類別也有不同的價值領域。 為此,您可能需要自定義字段管理,以使這些字段也是動態的。 所以我的建議模式總如下。
產品
Product_ID, Name, Price, Photo, Category_ID (forignkey of category table)
類別
Category_ID, Name, Parent_ID
Category_Field
Category_Field_ID, Category_ID, Name, Type
Product_Category_Field_Value
ID, Product_ID, Category_ID, Category_Field_ID, Value
所以在Product表中我們按Category_ID映射了類別。 在Category表中,我們通過parent_ID維護子類別。 這意味着如果類別是根類別,則在parent_ID中使用0,否則使用其父類別的Category_ID。 在Category_Field中,使用與類別關聯的自定義字段名稱。 這里type是字段或數據的類型,例如你可以在類型中使用的text,textarea,select,radio等。 Product_Category_Field_Value用於每個產品的自定義字段的值。 使用它會起作用。 祝一切順利。
您應該有一個過濾表,而不是為類別類型設置單獨的表。 過濾器將具有名稱/值並且是類別的子集。 現在,假設一個產品只能屬於一個類別,因為這簡化了事情。
Product (proID, fields, catID)
Categories (catID, catName)
Filters (filID, catID, filterName)
ProductFilters (proID, filID)
您可以使用automobile
和TV
填充類別。 無論您選擇哪種類別,產品只能與其中一種產品相對應,因此您應該盡可能地保持一般性。 然后,您有一個類別的過濾器,您可以提前設置( mileage
, fuel
等)。
必須在應用程序端而不是模式上強制使用類別的正確過濾器。
最后,產品和過濾器之間的鏈接允許您設置各個過濾器名稱的值( mileage
值, fuel
,值等)。您可以檢查catID
以確認所有相應的過濾器名稱都已計入,並且任何ProductFilters
條目都包含catID
。錯誤的catID被忽略。
您還可以完全刪除Categories
,並且只包含過濾器,產品及其映射,但是您無法檢查產品的可能過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.