表成一排表

时间:2013-11-11 09:08:34

标签: mysql sql database

> Table 1 : Category :id   , Name          :1     Hardware 2     Software
> 
> Table2 Hardware : id   ,  Name           :1      Hard disck  .      . .      .
> 
> Table 3 Software :id   , Name            :1      Java .      . .      .

我在我的数据库中有这些表格,我想通过选择用户可以观看另一个表格的类别来显示类别,但我不知道这样做的正确方法是什么!例如,如果用户可以动态添加新类别以及如何动态创建新类别表!!!

1 个答案:

答案 0 :(得分:1)

<强>停止。不要为每个类别创建表。从头开始使用正确的模式设计。通过允许您正常维护和查询数据,它将节省大量时间。

在您的情况下,架构可能看起来像

CREATE TABLE categories
(
  category_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  category_name VARCHAR(128)
);

CREATE TABLE items
(
  item_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  category_id INT, 
  item_name VARCHAR(128),
  FOREIGN KEY (category_id) REFERENCES categories (category_id)
);

插入新项目并将其与类别相关联

INSERT INTO items (category_id, item_name)
VALUES (1, 'Hard disk');
INSERT INTO items (category_id, item_name)
VALUES (2, 'Java');

获取类别Hardware

中的项目
SELECT item_id, item_name
  FROM items i JOIN categories c
    ON i.category_id = c.category_id
 WHERE c.category_name = 'Hardware'

或轻松获取每个类别的项目数

SELECT category_name, COUNT(item_id) no_items
  FROM categories c LEFT JOIN items i
    ON c.category_id = i.category_id
 GROUP BY c.category_id, c.category_name;

这是 SQLFiddle 演示

如果某个商品可能属于不同的类别,那么您需要一个多对多的表格categories_items