2

我不太确定这是否可能,或者是否属于数据透视表的类别,但我想我会去找专业人士看看。

我有三个基本表:Card、Property 和 CardProperty。由于卡片没有相同的属性,而且同一属性通常有多个值,因此我决定使用联合表方法来存储数据,而不是在卡片表中使用非常大的列结构。

属性表是一个基本的关键字/值类型表。所以你有关键字 ATK 和分配给它的值。还有另一个名为 SpecialType 的属性,一张卡片可以有多个值,例如“Sycnro”和“DARK”

我想做的是创建一个视图或存储过程,它为我提供卡 ID、卡名称和所有分配给卡的属性关键字,作为指定卡的 ResultSet 中的列和它们的值。所以理想情况下,我会有一个结果集,如:

ID  NAME                   SPECIALTYPE
1   Red Dragon Archfiend   Synchro
1   Red Dragon Archfiend   DARK
1   Red Dragon Archfiend   Effect

我可以这样计算我的结果。

我想甚至更巧妙的是根据关键字将属性简单地连接在一起,所以我可以生成一个 ResultSet ,如:

1  Red Dragon Archfiend   Synchro/DARK/Effect

..但我不知道这是否可行。

帮我stackoverflow Kenobi!你是我唯一的希望。

4

5 回答 5

1

这是用于 SQL 服务器的吗?

如果是的话

将多行中的值连接到一列 (2000) 将
多行中的值连接到一列有序 (2005+)

于 2008-08-20T15:36:17.123 回答
1

相关但值是值保存在单独的列中,并且您提前知道您的“特殊类型”:
SQL query to compare product sales by month

否则,我会在存储过程中使用光标来执行此操作,或者在业务或表示层中执行转换。

如果您了解所有情况,请使用 sql:

Select
    ID,NAME
    ,Synchro+DARK+Effect --  add a some substring logic to trim any trailing /'s
from
    (select
        ID
        ,NAME
        --may need to replace max() with min().
        ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro
        ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK
        ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect
    from
        table
    group by
       ID
       ,NAME) sub1
于 2008-08-20T15:48:57.577 回答
0

不要通过连接来折叠以存储数据库中的相关记录。它不完全是最佳实践。

你所描述的是一个数据透视表。数据透视表很难。我建议尽可能避免使用它们。

为什么不直接读取相关行并在内存中处理它们?听起来您不会花费太多毫秒来执行此操作...

于 2008-08-20T15:34:04.307 回答
0

一种选择是让 Properties 有一个 PropertyType,所以:

table cards
integer ID | string name | ... (other properties common to all Cards)

table property_types
integer ID | string name | string format | ... (possibly validations)

table properties
integer ID | integer property_type_id | string name | string value
foreign key property_type_id references property_types.ID

table cards_properties
integer ID | integer card_id | integer property_id
foreign key card_id references cards.ID
foreign key property_id references propertiess.ID

这样,当你想设置一个新的属性值时,你可以通过它的类型来验证它。一种类型可以是具有值枚举的“SpecialType”。

于 2008-08-20T15:39:05.620 回答
0

我的属性表确实有一个类型/格式,这样我就知道在处理整数值时如何进行转换/评估。我不确定它是否与这个问题有关。

于 2008-08-20T17:29:19.927 回答