3

我正在为聚会场所制作一个在线预订系统,我的客户希望为他的用户提供某些“套餐”。然后这些包将具有“子选项”,我不确定如何存储它们。例如,如果一个包裹是“气球”,我需要能够在其下存储不同的选项,例如“红色气球”、“绿色气球”等,或者披萨 > 大、中小。

当然,我正在使用一个数据库,它目前设置了一个用于包裹的表格和一个用于预订的表格。bookings 表有一个列,其中包含引用存储在“packages”表中的记录的包 ID 列表。

现在,我认为解决此问题的最佳方法是在约会表中添加另一列,其中包含子选项,形式为:

packageid:optionid;package2id:option2id

以及 packages 表中的另一列具有以下形式的选项:

1:red,2:blue,3:green //for options with no add'l price
1:large[$20],2:medium[$15],3:small[$10] //for options that change the price

我想这会起作用,但我觉得必须有更好的方法来做到这一点。如果有人有任何想法,或者以前做过这样的事情,我将不胜感激。

4

4 回答 4

7

如果您有可变数量的选项,就像您所做的那样,通常会执行以下操作:

创建一个按 ID 链接包和选项的表。因此,您将拥有packagesandoptions表,然后您将拥有一个package_options仅具有(除了它的 id 和您存储的任何创建/修改日期时间之外) apackage_idoption_id.

然后,您将加入三个表以按包获取选项。我不是特别喜欢这种方法,但是在关系数据库领域我还没有找到更好的方法。

于 2012-06-22T20:09:27.173 回答
1

有几种方法可以解决这个问题。基本上,您的解决方案越灵活,它就越复杂。既然你在寻求帮助,我会给你一个更简单的解决方案。

做一个这样的表:

ID, PackageName, OptionName
1,  Balloons, Red Balloons
2,  Balloons, Blue Balloons
3,  Pizza, Plain
4,  Pizza, Pepperoni
5,  Clown, NULL

然后,当您需要从包列表中进行选择时,您可以从 tblPackages GROUP BY PackageName 中选择 PackageName。用户选择包后,可以 SELECT OptionName from tblPackges where PackageName = 1;

通过这种方式,用户永远无法真正选择单个包,他们实际上是在选择选项,但对他们来说,看起来他们选择了一个包,然后是一个选项。

如果您熟悉这个概念,您会发现您可以制作一个包表,然后制作一个选项表,并将它们连接起来。但老实说,对于小型应用程序来说,这样做没有性能方面的理由。上面的方法比你用大量连接结束的混杂的 ID 更容易理解。

希望能帮助到你。

于 2012-08-24T23:13:54.927 回答
1

首先列出您要存储的实体以及它们之间的关系。根据您的描述,您有 3 个实体参与存储约会:

  1. 约会
  2. 选定的包
  3. 选定的选项

有2个关系:

  1. 每个约会可以有任意数量的包裹
  2. 每个包任意数量的选项

实体是您的主表,它们之间的关系是外键:

  • 餐桌约会(Id Int,约会细节......)
  • 表 selected_pa​​ckages (Id Int,appation_id Int,包详细信息...)
  • 表 selected_options ( selected_pa​​ckage_id Int, option details ... )

请注意,我在这里仔细提到了选定的包和选项 - 您可能还有其他代表可用包和选项的表,并且我已经写了“包详细信息”和“选项详细信息”,您可能只存储一个外键参考这些(尽管您可能想要拍摄快照,特别是价格等重要细节,以便您记录预订时的详细信息)

于 2012-08-25T18:15:18.007 回答
-1

你没有说你使用的是什么类型的数据库(除了在解释中提到表)。

因此,如果我们假设您只是想根据最佳实践获得答案,我建议您使用无模式(NoSQL) MongoDB而不是关系数据库。

否则,只需忽略我的评论并阅读其他评论。我猜你需要两个通过 SQL连接相互连接的单独的表。

于 2012-08-28T16:48:02.403 回答