我有一個數據庫設計,其中我存儲圖像文件名在一個名爲resource_file的表中。數據庫設計中多個「項集」的方法
CREATE TABLE `resource_file` (
`resource_file_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`resource_id` int(11) NOT NULL,
`filename` varchar(200) NOT NULL,
`extension` varchar(5) NOT NULL DEFAULT '',
`display_order` tinyint(4) NOT NULL,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`canonical_name` varchar(200) NOT NULL,
PRIMARY KEY (`resource_file_id`)
) ENGINE=InnoDB AUTO_INCREMENT=592 DEFAULT CHARSET=utf8;
這些「文件」是由另一臺聚集稱爲資源(這有點像一個專輯):
CREATE TABLE `resource` (
`resource_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`resource_id`)
) ENGINE=InnoDB AUTO_INCREMENT=285 DEFAULT CHARSET=utf8;
這種設計背後的邏輯來得心應手,如果我要分配一定的例如,「資源」(專輯)到特定類型的「項目」(產品,用戶,項目&等)的類型:
CREATE TABLE `resource_relation` (
`resource_relation_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`module_code` varchar(32) NOT NULL DEFAULT '',
`resource_id` int(11) NOT NULL,
`data_id` int(11) NOT NULL,
PRIMARY KEY (`resource_relation_id`)
) ENGINE=InnoDB AUTO_INCREMENT=328 DEFAULT CHARSET=utf8;
這個表擁有資源到一定類型的項目的關係,如:
- 產品
- 用戶
- 畫廊
- &等
我做正是通過給「module_code」一個像「product」或「user」這樣的值並指定data_id添加到相應的unique_id,在這種情況下爲product_id或user_id。
因此,在這一天結束的時候,如果我想查詢分配到與123的ID我查詢resource_relation表產品的資源:(非常簡化的僞查詢)
SELECT * FROM resource_relation WHERE data_id = 123 AND module_code = 'product'
這給了我資源的我可以找到相應的圖像。
- 我發現這種方法非常實用,但我不知道這是否是一個正確的做法這個特殊的問題。
- 這種方法的名稱是什麼?
- 這是一個有效的設計?
謝謝
如果您這樣做,請確保您在'module_code'上創建索引並通過它進行集羣。 – cdhowie
我會牢記這一點!這是一種「壞方法」嗎?你怎麼看?請提供一些信息,如果你可以,我真的很感激!謝謝 – Herr