2

我有非规范化的数据:

+----+----------+------+--------+
| 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

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

例如:如果用户选择daniellename则只有两个选项typebikebus,唯一的选项animaldog

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

4

1 回答 1

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
于 2013-08-12T05:46:40.303 回答