c# - 如何构造将输入下拉框的数据?

标签 c# .net sql sql-server t-sql

我已经对数据进行了非规范化:

+----+----------+------+--------+
| pk |   name   | type | animal |
+----+----------+------+--------+
|  1 | alex     | car  | cat    |
|  2 | alex     | bike | cat    |
|  3 | liza     | car  | dog    |
|  4 | danielle | bike | dog    |
|  5 | danielle | bus  | dog    |
+----+----------+------+--------+

我想要 3 个下拉框。

  1. 姓名
  2. 类型
  3. 动物

用户选择第一个选项后,其他下拉菜单应该有级联效果。

示例:如果用户选择 danielle 作为名称,则类型的唯一两个选项将是自行车公共(public)汽车动物的唯一选择是

我应该如何构建 SQL 表?我应该反规范化吗?

最佳答案

我想说你的解决方案取决于你在这个表中有多少数据。 如果此表相对较小,您可以将其加载到内存中,按不同的值填充组合框,然后按所选字段过滤数据。

如果它很大,您可能应该像 @astander 所说的那样对表进行非规范化,用引用表中的数据填充组合框,然后当值发生变化时,从 SQL 中选择过滤器,如下所示:

declare @name_id int -- input parameter, fill it with id of chosen name

-- filter for type combo
select distinct type_id from main_table where name_id = @name_id

-- filter for animal combo
select distinct animal_id from main_table where name_id = @name_id

关于c# - 如何构造将输入下拉框的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180064/

相关文章:

c# - 如何知道是否使用c#删除了一条记录

c# - Telnet 服务器 -> 退格键/删除不起作用

mysql - Union 和 join 子句返回重复值

java - 在executeUpdate 中的准备好的语句中抛出异常

static string[] contains() (slooooow) 与 == 运算符的 C# 性能

.net - .NET中的反射有什么用?

c# - 使用 DynamicMap() 并忽略空源值

c# - 加载一个 Inkbox 签名,从 SQLserverCE 存储为一个数组

MySQL - 从列中获取最大值,然后存储在变量中

c# - IFeatureDefinitionProvider 用于从 SQL Server 中选择功能