如何构建将被输入下拉框的数据?

时间:2013-08-12 05:27:55

标签: c# .net sql sql-server tsql

我有非规范化数据:

+----+----------+------+--------+
| 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. name
  2. type
  3. animal
  4. 用户选择第一个选项后,应该有其他下拉列表的级联效果。

    示例:如果用户为danielle选择name,则type的唯一两个选项为bike和{{1} } bus的唯一选项是animal

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

1 个答案:

答案 0 :(得分:3)

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

如果它很大,你可能应该对表进行非规范化,如@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