我已经对数据进行了非规范化:
+----+----------+------+--------+
| 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 个下拉框。
姓名
类型
动物
用户选择第一个选项后,其他下拉菜单应该有级联效果。
示例:如果用户选择 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/