首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在数据库中允许和存储子选项

如何在数据库中允许和存储子选项
EN

Stack Overflow用户
提问于 2012-06-23 04:04:26
回答 4查看 284关注 0票数 3

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

当然,我使用的是一个数据库,它当前设置了一个用于包的表和一个用于预订的表。bookings表有一个列,其中包含引用" packages“表中存储的记录的包的in列表。

现在,我认为最好的方法是在appointments表中添加另一个列,该列将包含子选项,格式如下:

代码语言:javascript
运行
复制
packageid:optionid;package2id:option2id

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

代码语言:javascript
运行
复制
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

我认为这是可行的,但我觉得肯定有更好的方法来做这件事。如果有人有任何想法,或者以前做过这样的事情,我将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-23 04:09:27

如果您有数量可变的选项,通常会执行以下操作:

创建一个按ID链接包和选项的表。因此,您将拥有自己的packagesoptions表,然后您将拥有一个package_options表,该表只有一个package_id和一个option_id (除了它的id和您存储的任何创建/修改日期时间之外)。

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

票数 7
EN

Stack Overflow用户

发布于 2012-08-25 07:13:55

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

制作一个这样的表:

代码语言:javascript
运行
复制
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。用户选择套餐后,可以从PackageName =1的tblPackges中选择OptionName;

通过这种方式,用户不能真正选择一个单独的包,他们实际上是在选择选项,但对他们来说,这看起来像是他们选择了一个包,然后选择了一个选项。

如果您熟悉这个概念,您将看到您可以先创建一个packages表,然后再创建一个options表,然后将它们连接在一起。但老实说,对于小型应用程序来说,这样做没有性能方面的原因。上面的方法比你用大量连接得到的混杂的ID更容易理解。

希望能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-08-26 02:15:18

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

  1. appointments
  2. selected packages
  3. selected选项

有两个关系:

每个约会都可以有任意数量的packages

  • each包和任意数量的options

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

  • 表约会( Id Int,约会详细信息... )
  • 表selected_packages ( Id Int,appointment_id Int,包详细信息... )
  • 表selected_options ( selected_package_id Int,选项详细信息... )

请注意,我在这里仔细地引用了选定的包和选项-您可能有其他表表示可用包和选项,在我写的"package details“和"option details”的地方,您可以只存储对这些的外键引用(尽管您可能想要快照,特别是像价格这样的重要详细信息,以便您在预订时有详细信息的记录)。

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

https://stackoverflow.com/questions/11163333

复制
相关文章

相似问题

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