我有非规范化数据:
+----+----------+------+--------+
| 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个下拉框。
name
type
animal
用户选择第一个选项后,应该有其他下拉列表的级联效果。
示例:如果用户为danielle
选择name
,则type
的唯一两个选项为bike
和{{1} } bus
的唯一选项是animal
我应该如何构建SQL表?我应该反规范吗?
答案 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