1

我正在寻找一些关于重新设计产品数据库的方向以及从中存储/检索数据的最佳方法的建议。我遇到的问题是如何最好地代表产品可能具有的各种(有效)选项。

基本结构是(不是实际的表定义):

PRODUCT_TABLE {
ID(int),
NAME(varchar),
AVAILABLEOPTIONS(varchar),
etc...
}

COLOROPTIONS_TABLE {
ID(int),
COLORNAME(varchare),
etc...
}

BODYOPTIONS_TABLE {
ID,
BODYNAME,
etc...
}

在 AVAILABLEOPTIONS 字段中存储值的最佳方式是什么,这将允许我在产品可用的那些表中指定 OPTIONS 表和 ID。(即,产品可能无法在所有选项中使用特定选项表)

我做了很多研究(主要是在这个很棒的网站上)并查看了 JSON、序列化值、多维数组等,但我不确定最好的方法。

最后, AVAILABLEOPTIONS 值将用于在产品页面上显示选项或用于构建表单以供用户生成有效的产品代码。我还将尝试设置一个输入表单,允许管理员生成用于存储在数据库中的可用选项值。

任何提示或想法将不胜感激!


我不确定这是否是放置此更新的正确位置,但这里是。

进行了更多研究,似乎在单个字段中存储多个值是绝对禁止的。我也不确定 EAV 模型是否适合我的需求。但是当谈到规范化我拥有的数据库要求时,我不确定我是否已经弄清楚了。我想出了这个:

图片在这里:http ://dev.aqualux.com.au/images/1.png (不会让我在编辑中发布图片,因为我在这里太新了......)

橙色表中的 pid/oid 是外键。我没有掌握的问题是任何给定的产品都可以有给定类型的多个选项,或者根本没有....

谢谢

4

2 回答 2

2

您是否想过创建一个额外的表来充当桥梁?最近,我建立了一个数据库来将 Adob​​e Captivate 结果存储在 MSSQL 中。其中一项要求是根据员工及其部门创建一个独特的学生。仅此一项,就是三个表,我在其中使用桥梁作为个人评估的标识符。

我在下面的博客中发布了片段。请注意,这是直接从 MSSQL 中提取的。

CREATE TABLE [dbo].[division](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [divisionName] [VARCHAR](50)

CREATE TABLE [dbo].[employee](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [personName] [VARCHAR](50)

CREATE TABLE [dbo].[student](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [employee_id] [INT] NOT NULL,
    [division_id] [INT] NOT NULL

CREATE TABLE [dbo].[core](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [assessment_id] [INT] NOT NULL,
    [status_id] [INT] NOT NULL,
    [rawScore] [INT] NOT NULL,
    [maxScore] [INT] NOT NULL,
    [minScore] [INT] NOT NULL,
    [accuracy] [INT] NOT NULL,
    [TIME] [datetime] NOT NULL,
    [student_id] [INT] NOT NULL, /****** My unique record ******/
    [DATE] [datetime] NOT NULL

所以在你的情况下,你会有一个选项表

CREATE TABLE options(
    id INT AUTO_INCREMENT PRIMARY KEY,
    color SMALLINT,
    body SMALLINT
);

并修改您的 PRODUCT 表,使您的 AVAILABLEOPTIONS 为 SMALLINT 和外键,类似于https://stackoverflow.com/a/1545264

于 2012-06-02T03:15:38.920 回答
1

如果我没看错,那你就比现在更难了。

您将产品存储在产品表中

PRODUCT_TABLE {
    ID(int),
    NAME(varchar),
    etc...
}

然后在您的选项表中引用 ID。不过,我会想出一种方法来拥有一个选项表。以下示例使用 magento 使用的EAV 模型

OPTIONS_TABLE {
    PRODUCT_ID(int),
    ATTRIBUTE(varchar), // colorname, or bodyname
    VALUE(varchar) // value
}

要获得产品及其选项,您只需简单加入

select
    product_table.id,...options_table.attribute, options_table.value
where
   product_table.id=<ID> and options_table.product_id = options_table.id
于 2012-06-02T03:02:40.970 回答