2009-10-08 112 views
3

我想决定是为每个部分创建一个全局视图表还是1。例如,让我们说我有产品,类别和网页。MYSQL表结构

难道我有3个表e.g:

CREATE TABLE `tbl_products` (
`p_id` INT NOT NULL , 
`p_views` INT NOT NULL , 
INDEX (`p_id`) 
) ENGINE = MYISAM 

CREATE TABLE `tbl_categories` (
`c_id` INT NOT NULL , 
`c_views` INT NOT NULL , 
INDEX (`c_id`) 
) ENGINE = MYISAM 

CREATE TABLE `tbl_pages` (
`pg_id` INT NOT NULL , 
`pg_views` INT NOT NULL , 
INDEX (`pg_id`) 
) ENGINE = MYISAM 

或者我有1台存储所有如

CREATE TABLE `tbl_views` (
`view_id` INT NOT NULL , 
`view_type` VARCHAR(10) NOT NULL , 
`view_views` INT NOT NULL , 
INDEX (`view_id`) 
) ENGINE = MYISAM 

其中view_type是产品,类别或页面。

每种解决方案的优点/缺点是什么?

在此先感谢。

回答

2

我真的很喜欢1表方法,这使得数据库整洁,我认为这很重要。

另外,稍后您可能需要添加另一个类型,您不必添加另一个表,只需添加一个具有不同view_type的行。

0

把它们放在一张桌子里,这样比较好,比如说你必须选择no。所有3个视图一起访问单个表比三个单独的表更容易和更快,或者说你必须更新否。两个或两个以上的意见view_type的再好多了

0

在这种情况下,我建议去一个表。这三个表格之间的唯一区别是类型,因此我不认为它们是必需的。作为仅使用一个表的额外好处,如果添加新类型的视图,则不需要创建新的数据库表 - 您可以简单地使用新的view_type键。但是,如果您需要针对不同类型视图的不同数据段(例如:“页面”视图需要列“x”和“类别”视图需要列“Y”),那么您需要单独的表(这称为数据库正常化)。

0

我决定使用哪种方法来自需要多少记录以及信息量有多大变化。如果你只是列出几个视图,一张桌子是好的。

如果产品+类别+页面的数量少于一千,我会将它们合并到一张表中。优点是,如果您稍后要添加一个字段(例如:过时的标志),则只需将其添加到一个表中即可。缺点是您使用(稍微)更多空间,即存储内存。

随着记录数量变大,分隔列表可以提高性能。如果一种类型比其他类型多得多,那么较小的类型可能会陷入解析或维护表中。如果时间不同,空间可能成为一个问题。例如:如果产品开始需要更多信息(例如样式,价格或允许查看它的人),但Pages和Categories永远不会执行,表格将保留Pages和Categories不会使用的空间。然后,页面和类别记录开始看起来与产品混杂在一起。