0

我将键值对存储在我的数据库中以帮助进行规范化。我想要做的是根据某些标识符(例如“Apple”或“Banana”)迭代所有匹配的键/值,并生成一个等效于键/值对的“完整”表版本的视图. 请参阅下面的小提琴以获取更多信息:

小提琴

我想我将不得不使用各种游标,但不确定针对此类问题的“最佳”方法。

4

3 回答 3

1

假设您的 ID 在您的视图中唯一标识了所需的行(它们在您的 Fiddle 示例中没有),您可以创建如下视图:

create view details_view as
select id,
       max(case when key='Color' then value end) as color,
       max(case when key='Location' then value end) as location,
       max(case when key='Price' then value end) as price,
from   details
group by id;

我曾经写过一个包来帮助生成这样的查询 - 请参阅我的博客(我也在这里对这种数据模型大发雷霆!)

于 2013-09-20T13:52:58.693 回答
1

您的小提琴表明您的数据设计存在缺陷。除了使用可怕的 EAV 模型(如 Tony Andrews 所指出的那样)之外,您还有一个问题,即您的表中没有主键。

不可能知道苹果的颜色、位置和价格。使用当前的设置,不可能知道德克萨斯的苹果是红色还是绿色。

您的小提琴示例的最佳方法是像这样更改架构:

table fruit_details
(
    id INTEGER,  /* Generate using sequence */
    fruit_type varchar2(50),
    location   varchar2(100),
    price      number(8.2)
);
于 2013-09-20T13:53:15.427 回答
0

每个对象的 id 必须是唯一的。然后,类型可以成为另一个键。

小提琴

于 2013-09-20T13:57:24.280 回答