我正在制作一个聚会场所的在线预订系统,我的客户希望为他的用户提供某些“套餐”。这些包将有“子选项”,我不确定如何存储这些选项。例如,如果一个包是“气球”,我需要能够在其下存储不同的选项,如“红色气球”、“绿色气球”等,或者Pizza > large、medium small。
当然,我使用的是一个数据库,它当前设置了一个用于包的表和一个用于预订的表。bookings表有一个列,其中包含引用" packages“表中存储的记录的包的in列表。
现在,我认为最好的方法是在appointments表中添加另一个列,该列将包含子选项,格式如下:
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我认为这是可行的,但我觉得肯定有更好的方法来做这件事。如果有人有任何想法,或者以前做过这样的事情,我将不胜感激。
发布于 2012-06-23 04:09:27
如果您有数量可变的选项,通常会执行以下操作:
创建一个按ID链接包和选项的表。因此,您将拥有自己的packages和options表,然后您将拥有一个package_options表,该表只有一个package_id和一个option_id (除了它的id和您存储的任何创建/修改日期时间之外)。
然后,您将连接这三个表,以按包获取选项。我不是特别喜欢这种方法,但我还没有在关系数据库领域找到更好的方法。
发布于 2012-08-25 07:13:55
有几种方法可以解决这个问题。基本上,你的解决方案越灵活,它就越复杂。既然您在这方面需要帮助,我将给您一个更简单的解决方案。
制作一个这样的表:
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更容易理解。
希望能有所帮助。
发布于 2012-08-26 02:15:18
首先列出您想要存储的实体,以及它们之间的关系。根据您的描述,您有3个实体参与存储约会:
的
有两个关系:
每个约会都可以有任意数量的packages
实体是您的主表,它们之间的关系是外键:
请注意,我在这里仔细地引用了选定的包和选项-您可能有其他表表示可用包和选项,在我写的"package details“和"option details”的地方,您可以只存储对这些的外键引用(尽管您可能想要快照,特别是像价格这样的重要详细信息,以便您在预订时有详细信息的记录)。
https://stackoverflow.com/questions/11163333
复制相似问题