2010-07-02 116 views
1

我在設置一個包含類別和子類別列表的mysql表時遇到了一些問題。我不確定如何設置表格。它是否需要2個獨立的表格? 1個主要類別和1個子類別,還是可以全部在1個表格中?會有這樣的工作嗎?MySQL分類和子分類表結構

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) 
) 

這項工作還是完全錯誤?先謝謝您的幫助!

+0

@ three3如果你看一下答案會在你的投票的上下箭頭下面點出一點,點擊它。每個問題只能接受一個答案,但如果您覺得有用,您可以對任何其他人進行投票,包括*接受*答案。 – 2010-07-02 23:05:58

回答

4

如果你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'; 

如果你想在「車輛」一類的東西,但不是在任何verhicles的子類,只是有一個類別記錄,其中主要=「車」與子NULL。

當然,這不是特別靈活。你只有兩個分類級別,而且分類模型中沒有嵌入很多業務邏輯。但它可能足以滿足您的需求。


兩個其他的好,實踐證明,模型是鄰接表模型和嵌套集模型,這兩者都描述了,有很多很好的例子MySQL的代碼,over here

4

這取決於。

分類和子分類真的是兩回事嗎?這意味着類別沒有父母,而子類別始終在父類別中,並且沒有其他子類別。然後兩張桌子就可以了。

如果它像一棵樹,但只有類別(既可以是孩子又可以有孩子),您應該使用一個表格(Google「嵌套集合」)。 (或者你可能並不是指類別/子類別,而是主要類別/次要類別,其中次要類別不固定到某個主要類別。電子+自行車而不是自行車 - >速度計。表,如果它也可以是循環+電子)