1

我的 Web 应用程序中有几个列表框,用户必须填写。管理员可以从控制面板的组合框中添加/删除/编辑值。所以问题是将这些组合框保存在数据库中的最佳方法是什么。

一种方法是为每个组合框保留每个表。我认为这很容易处理,但我必须为每个组合/列表框创建 20 多个表。我认为这样做是否是一种好习惯。

另一种方法是为所有组合框保留一张桌子。但是在这种情况下删除数据时我很担心。如果我想从组合框表中的国家/地区删除印度,那么我将遇到问题。我可能必须将其更新为 null 或其他方式,并且必须在编程方面进行处理。

我对么。你能帮助我吗 ?

4

4 回答 4

2

我认为您应该创建一个包含 3 个字段的表。第一个字段是 id,第二个是名称,最后一个是外键。例如:

combo_box_table
id - 名称 - 框
1 - 日本 - 1
2 - 印度 - 1
3 - 苏格兰 - 2
4 - 英格兰 - 3

你只需要玩查询,每个框代表最后一个字段。1 代表组合框 1 和 2 代表组合框 2 等等 select * from combo_box_table where box = 1

如果你想删除印度,查询只是从 id = 2 的 combo_box_table 中删除

愿这有帮助

于 2012-12-20T04:13:10.593 回答
1

另一种可能性是将组合框数据作为数组或 json 字符串保存在表中的单个字段中,但是您是否要这样做取决于您希望表如何运行以及您的应用程序是什么。请参阅将 PHP 数组保存到 MySQL?了解更多信息。

编辑:

我将假设您有一个包含不同国家/地区的组合框,可能还有另一个带有职称和其他内容的组合框。

  1. 如果您创建多个表,那么是的,您将不得不使用多个 SQL 查询,但表中的数据量将是灵活的,删除将是一步过程:

    mysqli_query($link,"DELETE FROM Countries WHERE Name='India'");
    
  2. 使用 json 或 array 选项,您可以拥有一个表,并且每个组合框将是一列。这意味着您只需查询表一次即可填充组合框,但随后您必须解码 json 字符串并遍历它们并检查空值,例如,如果国家/地区有 50 个条目但职称只有 20 个. 数据量会有一些限制,因为“文本”类型只有有限的长度。(可能,但管理代码的噩梦)

您可能需要多次查询才能填充这些框,但我觉得第一种方法是最有条理和最灵活的,除非我误解了您的数据库结构需求......

第三种可能的答案虽然非常不同,但可能是使用 AJAX 从服务器上单独的 .txt 文件中填充组合框,尽管通过手动打开文件和键入以外的任何方式对其进行编辑并删除或添加选项在其中或删除它也会很复杂。

于 2012-12-20T03:45:14.503 回答
1

除非您在组合框本身级别有一些额外的信息,否则只需一个简单的组合框项目表就足够了:

CREATE TABLE COMBO_BOX_ITEM (
    COMBO_BOX_ID INT,
    VALUE VARCHAR(255),
    PRIMARY KEY (COMBO_BOX_ID, VALUE)
)

要获取给定组合框的项目:

SELECT VALUE FROM COMBO_BOX_ITEM WHERE COMBO_BOX_ID = <whatever>

这个查询的好处是它可以通过对主索引的简单范围扫描来满足。事实上,假设你的 DBMS 的查询优化器足够聪明,表堆根本不会被触及,你可以通过对表进行 集群来消除这个“不必要的”堆(如果你的 DBMS 支持集群的话)。从物理上讲,您最终会得到一个代表整个表的 B 树。

于 2012-12-20T04:58:22.047 回答
0

使用一个表Countries和另一个表进行Job Descriptions设置,如下所示:

国家

ID | Name  | JobsOffered | Jobs Available
_________________________________________
1  | India | 1,2,7,6,5   | 5,6
2  | China | 2,7,5,      | 2,7
etc.

职位描述

ID |       Name       | Description
___________________________________
1  | Shoe Maker       | Makes shoes
2  | Computer Analyst | Analyzes computers
3  | Hotdog Cook      | Cooks hotdogs well

然后,您可以查询您的数据库中的国家/地区并获取可用(和提供)的工作,然后只需在工作描述表中查询名称并向用户显示哪些工作可用。然后,当一项工作被填满或打开时,您所要做的就是使用新的 jobID 更新 contry 表。

这有帮助吗?(在这种情况下,您需要按照建议为每个组合框创建一个单独的表,并且您有可用作业的引用 ID)

于 2012-12-20T14:54:41.597 回答