首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当不是每条记录都是组的成员时,我如何表示记录组?

当不是每条记录都是组的成员时,我如何表示记录组?
EN

Stack Overflow用户
提问于 2011-02-07 16:44:10
回答 3查看 72关注 0票数 1

我正在构建一个应用程序,让大学生可以搜索住房。我的模型包括一张Room表,其中包含房间尺寸、是否为大厅工作人员预留的房间号以及其他内容。然而,有些房间参与了2-8个房间的“套间”。我该如何建模呢?

我考虑在Room表中使用suite_id列,允许使用NULL来说明(大多数)不是套房的房间。不过,似乎应该有一种更优雅的方式来做事情。

至于我想要对数据做什么,我希望能够检查一个房间是否是套房的一部分,并且我希望能够查询所有套房(可根据大小进行限制)。

任何建议都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-07 16:48:58

该模式工作得很好。

要检查房间是否是套件的一部分,请检查应用程序中的列是否为空。

要查询所有套件,请选择rows WHERE suite_id IS NOT NULL,然后选择limit by size by GROUP BY suite_id HAVING COUNT(*) = number_of_rooms_you_want

尽管语法可能略有不同,这取决于您所使用的RDBMS。你没有给这个问题加上任何标记。

票数 1
EN

Stack Overflow用户

发布于 2011-02-07 17:10:38

拥有一个可以为空的suite_id并没有什么不雅之处。这基本上意味着,在您的数据模型中,房间可以是套件的一部分。这是情况的直接表示,因此是优雅的。

其他选择要糟糕得多。如果你愿意,想一想,如果你把房间分到不同的桌子上,模型会是什么样子。一个用于套间,另一个用于非套间。突然之间,您的搜索条件必须遍历两个表。您可以跨两个表复制信息(实际上,只有一个标识符是不同之处)。这并不能代表问题,只会导致更多的跑腿工作,以及两个搜索查询(假设是在一个UNION中)获取结果的潜在性能影响。哦,如果您添加了一个公共属性,则需要将其添加到两个位置,并执行您必须执行的所有维护工作来识别该新列,两次。

另一种选择是将属于“套件”的所有字段都包含到主表中。然而,这意味着每个不属于套间的房间都有冗余数据。正如您所说的,它们很少成为套件的一部分,因此这些记录中的大多数都会有死空间。再说一次,它也不能代表这种情况。

你得到的解决方案是正确的和健壮的。

票数 1
EN

Stack Overflow用户

发布于 2011-02-07 17:39:22

如果一个房间可能是不同套房的一部分,你可以考虑创建一个单独的桌子SuiteRooms (这可能在某种程度上反映了他们是多么甜蜜的想法)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4919354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档