我正在尝试决定是为每个部分创建一个全局视图表还是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是产品,类别或页面。
每种解决方案的优点/缺点是什么?
提前致谢。
答案 0 :(得分:2)
我非常喜欢1表方法,这使数据库保持整洁,我认为这很重要。
此外,稍后你可能想要添加另一个类型,你不必添加另一个表,只需要一个具有不同view_type的行。
答案 1 :(得分:0)
将它们保存在一个表中是更好的,比如在一个实例中你必须选择否。对于所有3个视图,与三个单独的表相比,访问单个表会更容易和更快,或者说你必须更新no。两个或更多view_type
的观点再次好多了
答案 2 :(得分:0)
在这种情况下,我建议使用一张表。三个表之间的唯一区别是类型,因此我认为它们不是必需的。作为仅使用一个表的额外好处,如果添加新类型的视图,则无需创建新的数据库表 - 只需使用新的view_type键即可。但是,如果您需要针对不同类型的视图使用不同的数据(例如:“pages”视图需要列“x”,而“categories”视图需要列“Y”),那么您需要单独的表(这称为数据库)归一化)。
答案 3 :(得分:0)
我决定使用哪种方法来自需要多少记录以及信息量变化的可能性。如果你只是列出几个视图,那么一个表是好的。
如果产品+类别+页面的数量少于一千,我会将它们合并到一个表中。优点是,如果您想稍后添加一个字段(例如:一个过时的标志),您只需要将它添加到一个表中。缺点是你正在使用(稍微)更多的空间,即存储和放置。存储器中。
随着记录数量的增加,分离列表可以提高性能。如果一种类型的数量远远多于其他类型,那么较小的类型可能会在表的解析或维护中陷入困境。如果时间以不同的方式处理类型,则空间可能成为一个问题。
示例:如果产品开始需要更多信息(如样式,价格或允许查看的人),但页面和类别从不这样做,则表格将保留页面和类别永远不会使用的空间。然后,页面和类别记录开始看起来与产品混合在一起。