MYSQL表结构

时间:2009-10-08 19:04:45

标签: php mysql database database-design

我正在尝试决定是为每个部分创建一个全局视图表还是1。例如,让我们说我有产品,类别和页面。

我有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 

或者我有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是产品,类别或页面。

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

提前致谢。

4 个答案:

答案 0 :(得分:2)

我非常喜欢1表方法,这使数据库保持整洁,我认为这很重要。

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

答案 1 :(得分:0)

将它们保存在一个表中是更好的,比如在一个实例中你必须选择否。对于所有3个视图,与三个单独的表相比,访问单个表会更容易和更快,或者说你必须更新no。两个或更多view_type的观点再次好多了

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我决定使用哪种方法来自需要多少记录以及信息量变化的可能性。如果你只是列出几个视图,那么一个表是好的。

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

随着记录数量的增加,分离列表可以提高性能。如果一种类型的数量远远多于其他类型,那么较小的类型可能会在表的解析或维护中陷入困境。如果时间以不同的方式处理类型,则空间可能成为一个问题。

示例:如果产品开始需要更多信息(如样式,价格或允许查看的人),但页面和类别从不这样做,则表格将保留页面和类别永远不会使用的空间。然后,页面和类别记录开始看起来与产品混合在一起。