【问题标题】:MYSQL table structureMYSQL表结构
【发布时间】:2010-12-05 02:51:15
【问题描述】:

我正在尝试决定是否为每个部分创建一个全局视图表或 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 是产品、类别或页面。

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

提前致谢。

【问题讨论】:

    标签: php mysql database database-design


    【解决方案1】:

    我真的很喜欢 1 表方法,这样可以保持数据库整洁,我认为这很重要。

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

    【讨论】:

      【解决方案2】:

      最好将它们放在一个表中,例如在某个情况下您必须选择否。将所有 3 个视图放在一起,与三个单独的表相比,访问单个表会更容易和更快,或者说您必须更新编号。两个或更多view_type 的浏览量再次好很多

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我决定使用哪种方法取决于需要多少记录以及信息量发生变化的可能性有多大。如果只是列出几个视图,一张表就可以了。

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

          随着记录数的增加,将列表分开可以提高性能。如果一种类型比其他类型多得多,那么较小的类型可能会陷入表格的解析或维护中。如果时间对类型的处理方式不同,空间可能会成为问题。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-02-04
            • 1970-01-01
            • 2012-12-30
            • 2013-08-22
            • 2012-12-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多