MySQL Категории и Подкатегории Таблица Структура - PullRequest
1 голос
/ 03 июля 2010

У меня небольшая проблема с настройкой таблицы mysql, которая будет содержать список категорий и подкатегорий. Я не уверен, как настроить таблицу. Это должны быть 2 отдельные таблицы? 1 для основных категорий и 1 для подкатегорий или все это может быть в 1 таблице? Будет ли что-то вроде этой работы?

Create Table categories (
    category_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    sub_id INT UNSIGNED NOT NULL,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY (category_id)
)

CREATE TABLE items (
    item_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    description VARCHAR(100) NOT NULL,
    PRIMARY KEY (item_id),
    FOREIGN KEY (category_id) REFERENCES categories (category_id),
    FOREIGN KEY (sub_id) REFERENCES categories (sub_id)
)

Будет ли это работать или это совершенно неправильно? Заранее спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 03 июля 2010

Если вы на 100% уверены, что у вас будет только два уровня категорий (основной и дополнительный), вы можете сделать несколько разных вещей.Ни одно из них не является вашим предлагаемым решением:

CREATE TABLE categories (
    id int not null primary key,
    main varchar(64)
    sub varchar(64)
);

CREATE TABLE objects (
    id int not null primary key,
    category_id int,
    name varchar(64),
    FOREIGN KEY (category_id) REFERENCES categories (id)
);

Хотите все автомобили?

SELECT * 
FROM objects AS o 
INNER JOIN categories AS c ON o.category_id = c.id 
WHERE c.main = 'vehicles';

Хотите все рофлкоптеры?

SELECT * 
FROM objects AS o 
INNER JOIN categories AS c ON o.category_id = c.id 
WHERE c.main = 'vehicles' and c.sub='Roflcopters';

Если вы хотите что-то в "категория «транспортное средство», но не во всех подкатегориях транспортных средств, просто есть запись категории, где main = «транспортные средства» с подпунктом NULL.

Конечно, это не особенно гибко.Вы застряли только на двух уровнях категоризации, и в вашей модели категорий не так много бизнес-логики.Но этого может быть достаточно для ваших нужд.


Две другие хорошие, проверенные модели - это модель списка смежности и модель вложенного множества, обе из которых описаны, с множеством хороших примеров кода mysql. здесь

4 голосов
/ 03 июля 2010

Это зависит.

Действительно ли категории и подкатегории - это две разные вещи? Это означает, что категории не имеют родителя, в то время как подкатегории всегда находятся в родительской категории и больше не имеют подвидов. Тогда две таблицы в порядке.

Если это похоже на дерево, где есть только категории, которые могут быть как дочерними, так и иметь дочерние, вам следует использовать одну таблицу (Google "nested set").

(Или, может быть, вы имеете в виду не категорию / подкатегорию, а первичную категорию / вторичную категорию, где вторичная категория не привязана к определенной первичной категории. Электроника + езда на велосипеде вместо циклических спидометров. если это тоже может быть Cycling + Electronics)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...