MYSQL表结构

3
我将尝试决定是创建全局视图表还是为每个部分创建一个表。例如,假设我有产品、类别和页面。
我需要创建3个表,比如:
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 

或者我有一个表存储所有的例如。
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可以是产品(products)、类别(categories)或页面(pages)。

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

提前感谢您。

4个回答

2
我非常喜欢1表格方法,这可以使数据库保持整洁,我认为这很重要。
此外,以后你可能希望添加另一种类型,你不需要添加另一个表格,只需添加一个具有不同视图类型的行即可。

0

将它们放在一个表中更好,比如说你需要选择所有三个视图的数量,使用单个表比使用三个单独的表更容易和更快速。或者说,如果你需要更新两个或更多view_type的视图数量,也会更好。


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

0

我选择使用哪种方法取决于需要多少记录以及信息量有多大可能会发生变化。如果您只是列出几个视图,那么一个表就足够了。

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

随着记录数量的增加,分离列表可以提高性能。如果其中一种类型比其他类型更多,较小的类型可能会在表的解析或维护中陷入困境。如果时间对待这些类型不同,空间可能会成为一个问题。

例如:如果产品开始需要更多信息(如样式、价格或谁有权查看它),但页面和类别永远不需要,那么该表将保留页面和类别永远不会使用的空间。然后,页面和类别记录开始与产品混在一起看起来很愚蠢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接