[英]MySQL Normalization with Category with 1st Tier Sub-Category and 2nd Tier Sub-Category
我正在学习网页设计数据库的规范化,我找不到我需要的答案。 我能够从我在网上找到的一些教程开始,但找不到我能理解的答案。
我有几个产品类别,如:电子产品,电器。 (我们称之为“类别”)。
电子产品本身有子类别:手机,电脑,平板电脑。 (“第一级”)
然后手机有自己的类别:智能手机,平板电脑等(“第二层类别”)
所以目前我有这样的表:
Categories table
------------------------------------------
| category_id | category_name |
------------------------------------------
| 1 | Electronics |
| 2 | Appliances |
------------------------------------------
1st tier categories table
------------------------------------------
| category_id | 1st_tier_name |
------------------------------------------
| 1 | Cell phones |
| 1 | Computers |
| 1 | Tablets |
------------------------------------------
这是我被困的地方。 如何创建第二层类别表以及如何创建在这种情况下有效的链接表? 谢谢你们的时间。
使用parent_id指定记录所属的类别:
+--------+---------------+-----------+
| cat_id | name | parent_id |
+--------+---------------+-----------+
| 1 | Electronics | 0 |
| 2 | Appliances | 0 |
| 3 | Cell phones | 1 |
| 4 | Computers | 1 |
| 5 | Tablets | 1 |
| 6 | Smartphones | 3 |
| 7 | Tablet Phones | 3 |
+--------+---------------+-----------+
要选择所需的数据,您可以改进查询,例如:
mysql> SELECT
-> a.name AS main_category,
-> b.name AS second_level_category,
-> c.name AS thrid_level_category
-> FROM categories AS a
-> LEFT JOIN categories AS b ON (a.cat_id=b.parent_id)
-> LEFT JOIN categories AS c ON (b.cat_id=c.parent_id)
-> WHERE a.parent_id=0;
+---------------+-----------------------+----------------------+
| main_category | second_level_category | thrid_level_category |
+---------------+-----------------------+----------------------+
| Electronics | Cell phones | Smartphones |
| Electronics | Cell phones | Tablet Phones |
| Electronics | Computers | NULL |
| Electronics | Tablets | NULL |
| Appliances | NULL | NULL |
+---------------+-----------------------+----------------------+
@last评论:
mysql> desc categories;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| cat_id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
| parent_id | varchar(50) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> show create table categories\G
*************************** 1. row ***************************
Table: categories
Create Table: CREATE TABLE `categories` (
`cat_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`parent_id` varchar(50) DEFAULT NULL,
PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.