【问题标题】:SQL Server Table Design ; one table with type column vs multiple tablesSQL Server 表设计;一个具有类型列的表与多个表
【发布时间】:2016-04-07 16:36:56
【问题描述】:

我创建了一个网站,其中有一个博客和一个产品页面。帖子和产品存储在不同的表中。我使用微软的 sql 服务器。

我想创建一个表来存储每个帖子和每个产品的视图。我的 2 种可能的设计是:

  1. 所有视图的一个表

    (id, ref_id, date, ip, type) 
    

    类型是帖子或产品

  2. 两个单独的表,表post_views 和表product_views

    post_views(id, post_id, date, ip)
    product_views(id, product_id, date, ip)
    

哪种设计更好,为什么?

我的推理:

解决方案 1 需要更多的数据库空间(我们需要存储每个视图的类型值),还需要更“复杂”的查询。我们需要通过 id 和 type 进行搜索。

解决方案 1 更紧凑。我们的桌子较少,但性能不会那么好。如果我们有 100 万条记录,帖子有 50 万次浏览,产品有 50 万次浏览,我们必须搜索所有浏览量以按日期过滤(只是一个例子) 第一种解决方案的优点是紧凑,而且我少用一张桌子。

第二种方案需要多一张表,但查询性能和磁盘空间会更好。

这是我面临的一个非常常见的设计问题,我很想从一位非常好的专家那里得到答案。

【问题讨论】:

  • 是post和products在同一个数据库表上还是每个都有自己的表?另外,是MySql还是Sql server?这些是不同的产品...
  • 帖子和产品在不同的表上。我用的是微软的 sql server。

标签: sql sql-server database


【解决方案1】:

由于帖子和产品都有自己的表格,因此请使用第二个选项 - 表示帖子视图和产品视图的不同表格。

这是一个更好的选项的原因是,此选项允许您在视图表和帖子和产品表之间使用外键,并保持帖子和产品分开。

第一个选项还允许您在这些表之间使用外键,但这意味着您只能发布 ref_id 在帖子和产品表中都存在的视图。此外,它会强制更繁琐的 select 语句根据类型列包含不同的连接。

【讨论】:

    【解决方案2】:

    如果没有您提供的更多信息,我会选择第一个选项,因为它更简洁。除非您有令人信服的理由将它们分成两张表,否则您应该将它们放在一张表中。根据需要按类型过滤任何查询很容易。

    另一个考虑是,在存储过程中,具有可变字段参数(例如您的类型字段)比具有可变表名更常见的做法,因此您创建的任何存储过程的功能都将是如果你把他们放在一张桌子上,对那些追随你的人来说会更明显。

    【讨论】:

    • 更多信息:帖子和产品位于不同的表格中。我用的是微软的 sql server。
    • 嗯。如果您已经将它们放在单独的表中,那么最好保持这种方式。
    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2017-05-04
    • 2014-04-24
    相关资源
    最近更新 更多