0

我正在尝试将包含产品所有详细信息的产品表转换为 SQL 中的单独表。除了重复的描述符细节之外,我已经完成了所有工作。

我遇到的问题是所有产品都有许多其他产品包含的尺寸/颜色/样式/其他。我只想为所有项目使用一个尺寸或颜色描述符,并为所有产品重复使用“ID”,我认为这是产品 ID 的父键,它是...外键。唯一的问题是每个描述符都会分配有多个外键。所以我在思考只是让它跳过为每个描述符找出一个 Foreign Parent 键,然后检查该描述符是否存在以及它是否使用它的 Key 作为描述符。

数据表

PI  Colo   Sz   OTHER


1        |   Blue  |  5  |    Vintage

2        |   Blue  |  6   |   Vintage

3        |   Blac  | 5   |   Simple

4        |   Blac |  6   |   Simple

====================================

它的目标表是这个

====================================

DI Description

1       |   Blue

2       |   Blac

3       |   5

4       |   6

6       |   Vintage

7       |  Simple 

==============================

选择数据表

Unique.Data.Table.Colo

唯一的.Data.Table.Sz

Unique.Data.Table.Other

========================================

然后是我们创建所有描述符后的问题的对偶部分,如何进行新查询并将产品 ID 分配给描述符。

PI| DI

1 | 1

1 | 3

1 | 4

2 | 1

2 | 3

2 | 4

通过弄清楚如何做到这一点,我应该能够为产品中的所有 300 + 列复制此模式。其中一些字段有 60 多个字符,因此可以节省大量空间。

我使用数组吗?

4

2 回答 2

0

我认为您想为不同的类别拆分描述表,例如 - colorDescription、sizeDescription 等。

如果这不切实际,那么我建议有一个额外的列显示类别属性:

DI Description  Category

1 | Blue       | Color

2 | Blac       | Color

3 | 5          | Size

4 | 6          | Size

6 | Vintage    | Other

7 | Simple     | Other

然后将该表中的主键作为 ID 和类别列的组合。

这将减少注入任何数据错误的机会。追踪它也很容易。

于 2012-06-18T03:12:01.303 回答
0

好的,如果我理解正确,您希望所有唯一属性从列转换为detailstable具有 id 和描述字段的单个表 () 中的行:

假设架构:

datatable
------------------
PI [PK]
Colo
Sz
OTHER

detailstable
------------------
DI [PK]
Description

您可以首先使用以下方法将所有唯一属性放入其自己的表中:

INSERT INTO detailstable (Description)
SELECT 
    a.description
FROM
    (
        SELECT DISTINCT Colo AS description
        FROM datatable

        UNION

        SELECT DISTINCT Sz AS description
        FROM datatable

        UNION

        SELECT DISTINCT OTHER AS description
        FROM datatable
    ) a

然后链接datatabledetailstable,我假设你有一个交叉引用表定义如下:

datadetails
------------------
PI [PK]
DI [PK]

然后你可以这样做:

INSERT INTO datadetails (PI, DI)
SELECT
    a.PI
    b.DI
FROM
    datatable a
INNER JOIN
    detailstable b ON b.Description IN (a.Colo, a.Sz, a.OTHER)
于 2012-06-18T03:25:01.127 回答