我正在为聚会场所制作在线预订系统,而我的客户希望为他的用户提供某些“套餐”。这些包将有“子选项”,我不确定如何存储这些。例如,如果一个包是“气球”,我需要能够在其下存储不同的选项,例如“红色气球”,“绿色气球”等,或者比萨>大,中小。
我正在使用数据库,当然,它目前已设置了包的表和预订表。预订表有一列,其中包含引用存储在“packages”表中的记录的包ID列表。
现在,我认为最好的方法是在约会表中添加另一列,其中包含子选项,格式为:
packageid:optionid;package2id:option2id
以及包表中具有以下形式选项的另一列:
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
我想这可行,但我觉得必须有更好的方法来做到这一点。如果有人有任何想法,或者以前做过这样的事情,我会很感激帮助。
答案 0 :(得分:7)
如果您有可选数量的选项,则通常会执行以下操作:
创建一个按ID链接包和选项的表。所以你有packages
和options
表,然后你会有一个package_options
表,只有(超出它的id和你存储的任何创建/ mod日期时间)a {{ 1}}和package_id
。
然后你会加入这三个表来获得包的选项。我并不特别喜欢这种方法,但我还没有在关系数据库领域找到更好的方法。
答案 1 :(得分: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。用户选择包后,您可以从TblPackges中选择SELECTName,其中PackageName = 1;
通过这种方式,用户实际上无法选择单个包,他们实际上是在选择选项,但对他们来说,看起来他们选择了一个包,然后选择了一个选项。
如果你熟悉这个概念,你会发现你可以制作一个包表,然后是一个选项表,并在它们之间加入。但老实说,对于一个小型应用程序,没有性能原因这样做。上面的方法比使用大量连接的ID的混乱更容易理解。
希望它有所帮助。
答案 2 :(得分:1)
首先列出要存储的实体以及它们之间的关系。根据您的描述,您有3个实体参与存储约会:
有两种关系:
实体是您的主表,它们之间的关系是外键:
请注意,我已经在这里仔细地提到选定的包和选项 - 您可能还有其他表格代表可用包和选项,以及我写的地方“包详细信息”和“选项详细信息”,您可以只存储一个外键引用(尽管您可能需要拍摄快照,特别是价格等重要细节,以便您记录详细信息 在预订时。)
答案 3 :(得分:-1)
您没有说明您使用的是哪种类型的数据库(除了在说明中提及表格)。
因此,如果我们假设您只是希望根据最佳做法得到答案,我建议您使用schema-free(NoSQL)MongoDB而不是关系数据库。
否则只是忽略我的评论并阅读其他评论。我想你需要两个由SQL join相互连接的独立表。