【问题标题】:Different Approach to Gain Better Performance in SQL. Reservation Example在 SQL 中获得更好性能的不同方法。预订示例
【发布时间】:2013-01-25 17:04:27
【问题描述】:

您好,我是编程方面的新手,尤其是数据库设计方面的新手。 我刚刚开始使用数据库,我想知道其中哪一种设计给了我更好的性能并且更合理。 我已经建立了预订酒店表这样的:

为每个 Resevation 设置 DateIn 和 DateOut

为每个房间/天设置标志

假设我们最多有 100 个房间,所以如果我想为第二张图片生成表格(50 年)大约需要 15MB((100(房间)*8(位)+3(日期))*365(天) *50(年))的容量,但我认为当我想查询时,它会给我更好的性能。 第一张图片的查询更复杂,我认为性能较差 如果您给我理由或更好的方法,我将不胜感激。 提前致谢

【问题讨论】:

  • 不要使用重复的数据集。房间号不应该是它自己的列。顶级套装看起来是您的最佳选择。
  • 哦,您的空间计算(可能)是错误的 - 据我了解,在 SQL Server 上,它会自动将位列压缩在一起(成一个字节值)。尽管如此,我还是支持@njk - 我更喜欢第一个选项,尽管我会重命名您的日期列。 arrivesOndepartsBefore 是我的首选。

标签: sql sql-server sql-server-2008 sqlite tsql


【解决方案1】:

我的意思是,这确实与您计划如何访问和更改数据有关。我几乎在所有情况下都推荐第一个,但我不会否认可能存在第二个更好的边缘情况。我怀疑你的情况是这样的。

第一个为人们对预订的看法提供了一个更合理的近似值(这很好)——它还巧妙地编码了谁将在哪天住在哪个房间,并通过 thinks 将其与数据库的其余部分相关联比如预订信息,客人信息。当您尝试从您收集的数据中收集洞察力时,这些为您提供了重新想象数据关系的能力。例如。十年后,如果 CEO 说:“嘿,我们历史上一年中最受欢迎的日期是什么?使用“预订”模型,您可以轻松编写程序查询来找出答案。使用“日期” /Room Matrix' 模型,您将不得不手动检查每一列。总。

虽然第二个模型非常适合从不打算改变的酒店,但如果房间需要轮换放置怎么办?另一个带有布尔值的 100 列表,哪些房间在哪几天可供公众使用?将混乱与混乱混为一谈?如果加一个翅膀呢?您是否要在此表中添加另外 25 列等?它可能会为您提供“哪些房间可用,知道吗?”的一些运营效率。 - 但是您将如何构建“哪些房间将在 8 月 3 日至 6 日期间可用?”的查询?

请记住,在关系数据库中,您要根据列中的值来选择一组特定的行,您将很难根据行值来选择一组列。

【讨论】:

    猜你喜欢
    • 2016-06-07
    • 1970-01-01
    • 2021-04-17
    • 2015-01-08
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多