2014-12-02 45 views
-1

在我的網站上,客戶可以選擇創建具有各種項目(具有賣方,顏色等屬性)的事件。 我應該爲每個事件創建一個數據庫和一個新表嗎?我不知道另一種編程方式,將每個客戶/事件分割成一個新的數據庫似乎是一個糟糕的解決方案,但我是數據庫新手,不知道這是否愚蠢。使用數據庫和表(MySQL)

我假設我有一個TABLE用戶ID,一個TABLE用於每個事件,一個TABLE用於將用戶鏈接到他/她創建的事件。這是做到這一點的最佳方式嗎?全部在一個數據庫中? 謝謝!

+0

是的,這是愚蠢的。每個事件都有單獨的桌子也很愚蠢。 (作爲一個經驗法則,數據庫結構應該是靜態的:不要動態創建新表。) – JJJ 2014-12-02 19:48:17

+0

所以我應該有一個表與所有項目,並將事件作爲一個字段?因此,我可以使用該字段ID搜索所有項目,或者通過使用該ID在特定事件中搜索特定項目...這是有道理的。然後,我只需要一張表來鏈接用戶ID和事件ID。 – 2014-12-02 20:09:36

回答

0

您應該在用戶表和事件表之間具有一對多關係。事件表應該有用戶ID作爲外鍵。

CREATE TABLE user (
    id int UNSIGNED AUTO_INCREMENT NOT NULL, 
    name varchar(50) NOT NULL, 
    last_modified timestamp NOT NULL, 

    PRIMARY KEY (id), 
    UNIQUE KEY (name) 
); 

CREATE TABLE event (
    id int UNSIGNED AUTO_INCREMENT NOT NULL, 
    user_id int UNSIGNED NOT NULL, 
    name varchar(50) NOT NULL, 
    description varchar(500) NOT NULL, 
    last_modified timestamp NOT NULL, 

    PRIMARY KEY (id), 
    FOREIGN KEY (user_id) REFERENCES user.id ON UPDATE CASCADE ON DELETE CASCADE 
); 

那麼,你有你的用戶,當你添加一個事件,你只需將user_id分配給事件的用戶。希望這給你一些東西來建立。

+0

難道我不希望這是一個一對多的關係,因爲每個事件只能有一個創建者/用戶與它關聯? – 2014-12-02 20:21:39

+0

你是對的! :),這就是我至少說明的。只是一個錯字! – Seer 2014-12-02 21:59:40

0

如果您有少量的事件類型,並且事件類型在本質上有很大不同(不同的屬性),那麼您可以爲每個事件類型創建一個不同的表。

但是,通常情況下,您將爲所有事件創建一個包含事件類型或代碼(如果需要)列的數據庫。你也不需要創建一個包含所有事件類型的表,你的代碼可以包含它們。你的表應該只包含被激發的實際事件。