如何正确地向数据库显示和写入复选框列表? (理论/逻辑帮助)

请注意,我现在拥有的数据库设计完全处于沙盒模式。 什么都没有最终确定。 所有东西(再次是沙盒模式)都在一个表中。 此外,我现在正在寻找编码帮助。 我正在寻找适合这个难题的理论/逻辑方法,所以我可以自己进行编码。 我这样学得更好。 如果我需要编码帮助,我会回到这里寻求进一步的帮助。

我正在为手动创建的表单提交创建一些CheckBoxList中的第一个。 我一直在寻找多种方法来不仅创建所述CheckBoxList而且将其输入数据库。 然而,我面临的挑战(主要是因为我之前没有遇到过这种情况,我想了解这一点)是我不仅要担心在数据库中正确输入项目,而且我最终需要根据这些条目生成报告或制作可打印的表格。

假设我有一个特定类型的烧烤烤架的订单,我需要将此表格发送到全国各地的分销中心。 如果在表格上突出显示,配送中心将需要拉出所述烧烤。

以下是分配中心的CheckBoxList的外观:

所有
达拉斯
迈阿密
洛杉矶
西雅图
纽约
芝加哥
凤凰
蒙特利尔

如果检查了特定的城市(或所有城市),那么配送中心将拉动烧烤架进行装运。

增加的部分是我想:

  1. 能够从该数据库创建一个网格视图,用于报告以记录哪个配送中心获得了烧烤订单

  2. 能够创建报告,告诉分销中心在给定月份(以及其他报告中)发出烧烤订单。

这就是我现在正在玩的东西。

在我的aspx页面中,我有一个编程的复选框列表,其中所有的配送中心都作为列表项输入,以及“所有”(配送中心)的选项。

我还在此表中创建了一个专用列,其中包含listitem中的所有信息,并为此表编程了sqldataconnection,以便为此目的利用数据库的可编程性。

在将选择内容写入数据库时​​,我最初为每个目标城市创建了一个列,包括“全部”选项。 我只是把选择放在一个单独的专栏中,但是我今天一直在阅读有关数据库规范化的一些信息,前者的选项似乎比后者更好。 对于这种情况,这是正确的做法,特别是如果我需要考虑报告吗? 我是否将CheckBoxList数据放在特定列的一个单元格中? 我是否为每个配送中心创建单独的列? 我甚至在这里正确的轨道?

根据您要存储的城市数量,我使用按位运算符来存储少量数据。 实际上,它会将它存储在表中,如下所示:

CityID Location 2 Dallas 4 Miami 8 New York 16 Chicago 32 Montreal 

继续前往其他城市的2号基地。

当您的用户为订单选择多个城市时,插入到城市数据库中的值是按位OR计算。 因此,如果他们选择达拉斯,纽约和芝加哥,您将做以下事情:

 2 OR 8 OR 16 

哪个等于26

现在,您可以对结果值使用按位AND。 因此,如果要检查迈阿密,以下是评估:

 26 AND 4 = 0 

这表明迈阿密未被选中。 在评估中选择的任何值,它将返回其ID,如下所示:

 26 AND 8 = 8 

同样,我只将它用于小型数据子集,并使数据存储尽可能紧凑。 在计算上,它可能比其他一些方法更贵一些,但我不是100%肯定。

注意:这可能不是最好的方法,但我已经看过它们。

1)有一列逗号分隔的字符串如果选项在数据库中没有ID(具有单独的引用表),这应该可以正常工作

  • 您将需要遍历复选框列表,获取所选选项并将它们与String.Join()连接起来
  • 您需要在从数据库接收字符串时拆分字符串,并使用它来检查复选框是否在结果数组中找到了文本
  • 问题:您可能需要在DB中使用拆分function将逗号分隔的字符串转换为行。 在web / stackoverflow上有splitfunction实现

2)您可以为位置创建单独的表,例如xxxxtable_location,其中引用了主表的FK。 这将是一个多表

 ParentID, Location 1 Dallas 2 Miami 2 New York 2 Chicago 3 Miami