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

データベースにこれらのテーブルがあり、ユーザーが他のテーブルを見ることができるカテゴリを選択してカテゴリを表示したいのですが、これを行う正しい方法がわかりません!! 特に、ユーザーが新しいカテゴリを動的に追加できるかどうか、および新しいカテゴリ テーブルを動的に作成する方法!!!

4

1 に答える 1

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

于 2013-11-11T09:32:34.087 に答える