对不同(但相似)的商业计划使用不同的表是一种好的做法吗?

Pas*_*rby 5 php database oracle database-design

有一个非常相似的问题:使用大量不同的需要知道信息对产品进行建模并将它们与线条项目相关联?但我找不到能帮助我的答案;

上述问答中的某些人指出设计数据库以保存不同的元数据信息,这有很好的接受答案,但由于我的程序中明确需要搜索功能,所以我不希望性能受到损害.


我是一名"技术人员",使用PHP + Oracle来跟踪公司的销售进度并生成报告.我们的工作流程通常如下所示:

  1. 营销人员为我的系统提供准备好的数据集;
  2. 前线员工(销售)标志着我的系统的进展;
    • 任何人都可以在系统中搜索结果;
  3. 我向营销人员生成报告.

问题:

许多数据集列是相同的(或可以认为是相同的),如下所示:

account|customer_name|gender|location|program_segment|...
Run Code Online (Sandbox Code Playgroud)

但营销部门.喜欢提出新想法(并放弃现有想法),因此每个"销售计划(活动)"可能有自己的数据,例如

对于计划1,它们可能包含:

...|prev_coupon_code|last_usage_amount|...
Run Code Online (Sandbox Code Playgroud)

但是,对于计划2,它们可能包含:

...|is_in_plan_1|is_in_plan_2|...
Run Code Online (Sandbox Code Playgroud)

你明白了.

不成功的尝试:

  • 为了保存所有数据,我曾经使用一个"足够长"的表,它具有所有可能的属性(列),并留下空白/不必要的属性NULL.

    但现在我觉得它永远不会"足够长",因为有太多"属性"甚至更多"销售重点":我为系统的新版本起草了一个41列表,突然他们提出了一个具有无法适应的信息的新程序.

  • 有人建议我在表格中创建"虚拟列"并在前端"记住"它们的不同含义.这可以适用于几种数据类型,例如NUMBER(1)Y/N DATE等,但在谈到时VARCHAR2,我不确定其中有多少是足够的......加上这使得表看起来"脏".

题:

沮丧,我现在正在认真考虑为不同的程序使用不同的表格,并使用UNION条款生成大报告,以防他们被问到"我们如何在本月/季节/年销售?"

从技术上讲,这是一个好习惯吗?我应该实施吗?


编辑#1:

为了澄清,一个"销售计划"通常会在它被放弃之前运行几个月,并且每个运行程序每月至少会有一个数据集.

并且可以有多个程序同时运行.

编辑#2:

那些"程序指定的"列有各种数字:一个程序可能需要10个,而另一个程序可能只需要1个.

APC*_*APC 2

这是一种没有正确答案,只有拼凑选择的情况。

我非常乐意使用 XMLType 来保存瞬态数据结构。XML 使我们能够为每个计划定义模式,但使用 XMLType 就无需更改数据库本身。我们可以对 XPath 查询建立索引,这样性能仍然很好。 了解更多

一个问题是针对 XML 编写查询有点麻烦,但我认为无论您采用哪种方法,尴尬的查询都会成为一个问题。