0

我已经设计了我的数据库,一切都很好。在数据库中,我有一个 Age 列。

其中一项要求是年龄必须分为 1-12、13-17、18-25、26-35 等类别,以便于选择。

我对如何做到这一点感到有些困惑?我没有被要求实际实现数据库,只设计 ERD。

我不确定这是否足以让某人回答,所以如果您需要更多信息,请询问。

编辑:

有人告诉我,我不必考虑随着时间的推移而改变年龄。

4

2 回答 2

2

我认为比向数据添加新列更好的解决方案是简单地在原始表上定义一个视图:

create view vw_customer as (
    select c.*,
           (case when Age between 1 and 12 then '1-12'
                 when Age between 13 and 17 then '13-17'
                 when Age between 18 and 25 then '18-25'
                 when Age between 26-35 then '26-35'
            end) as AgeGroup
    from c;

如果您的数据库支持,另一种选择是计算列。当 SQL 提供其他替代方案时,似乎没有理由将这些派生数据实际与数据一起存储。

于 2013-06-03T13:22:58.327 回答
0

我建议添加另一列称为 AgeBracket 的内容,以最大程度地减少信息丢失。

然后你可以做两件事之一 1)有一个更新语句(或在插入时做)......

UPDATE customer 
SET AgeBracket = case when Age<=12 then '1-12' when Age<=17 then '13-17' .... end
WHERE AgeBracket IS NULL
-- alternative approach    
INSERT INTO Customer(Name,Age,AgeBracket) 
VALUES(@Name, @Age, case when @Age<=12 then '1-12' ....end)`

或2)您可以创建一个具有结构的查找表并将其MaxAge , AgeBracketLabel连接到哪里Age<=MaxAge并引用标签-如果/当它变得更复杂或需要有关括号的更多信息时,这很有用

于 2013-06-03T12:41:19.010 回答