定价概述的数据库设计

时间:2013-01-27 10:39:29

标签: mysql database

我正在努力为高尔夫球场的定价概览网站找出最佳设计。

保持最终价格的表格如下:

clubid,courseid,seasonid,holesid,TIMEID,PERSONID,速率

字段为:

  • clubid:高尔夫俱乐部标识的ID:俱乐部可以有多个 当然
  • 赛季:俱乐部/球场有一个以上的赛季(高, 肩膀,低,...)
  • holesid:玩家可以玩的洞(18,9,allday,......)
  • timeid:根据一天中的时间可以有多种费率(早期, 素,黄昏,...)
  • personid:根据人的类型可以 是折扣(学生,大四)或加价

所有这些将在列出各种选项的相应表格中进一步定义。

至于我的问题:

  1. 这个概念是否存在重大设计缺陷,我想念?
  2. 使用此设计查询速度是否有任何问题?我觉得这个多维设计最令人不安的是关于数据输入的问题。
  3. 在这种结构中输入数据的最佳方法是什么?
  4. 我有一个几乎不可行的选择,但不想在他们的想法中影响他人。

3 个答案:

答案 0 :(得分:1)

Check Here。这会帮助你。这有各种各样的数据模型。它还包含高尔夫管理。

http://www.databaseanswers.org/data_models/golf_club_management/index.htm

答案 1 :(得分:1)

您提出的星型架构设计存在两个可能的问题。

问题1:灵活性

通过将价格确定标准设置为一组固定的外键来查找表格,您可以创建一种情况,其中您要跟踪价格的每个课程必须以某种方式适合此方案。一旦你来到一个有创意营销经理的课程,你就会发现自己必须修改你的模式只是为了容纳那一门课程。

问题2:数据输入努力

正如您已经注意到的那样,拥有一组固定价格决定因素意味着所有这些决定因素的交叉产品是必须维护的大量数据。令人沮丧的是,对于许多课程而言,一些决定因素并不重要。

另一个可能令人沮丧的事情可能是每个课程都可以对每个决定因素进行自己的解释。例如,旺季对每个课程意味着什么?如果你不关心这些细节,那么你没关系,但如果你真的需要用特定的术语解释自己(即我们在课程 X 的“峰值”是什么日期?)然后您的价格维度表中也会有很多数据。

解决问题:

如果您愿意使用更复杂的数据模型,则可以显着减少数据管理的数量。您可以对决定因素进行表格驱动,而不是具有固定价格点决定因素集的星型模式。架构将是这样的:

COURSE              -- The list of courses you are tracking
  courseid (PK)
, name

COURSE_PRICE_POINT  -- An individual price point for a course
  cppid (PK)
, courseid          -- FK to COURSE
, price             -- The amount, if your system is multi-currency, include a code 
                    -- for the currency, e.g. GBP, EUR, USD, etc.

COURSE_PRICE_FACTOR -- The list of factors that make a specific price point applicable
  cppid (PK)        -- PK, also FK to COURSE_PRICE_POINT
, pfid (PK)         -- PK, also part of FK to FACTOR_VALUE
, fvid              --     the other part of the FK to FACTOR_VALUE

FACTOR_VALUE        -- A lookup table of price factors, e.g. "Peak Season", "18 Holes"
  pfid (PK)         -- PK, also FK to PRICE_FACTOR
, fvid (PK)
, value             -- Description of the price factor value

PRICE_FACTOR        -- A list of the dimensions that impact price, 
                    -- e.g. Season, Holes, Person, Time
  pfid (PK)
, description       -- A caption/name for the price factor.

模型的工作方式是,对于课程可能收取的每个特定价格,您在COURSE_PRICE_POINT中都有记录。对于您的星型模式定价表中可能包含的每条记录,此表中将有一条记录,如果您的星型模式表可能具有最小行数

星型模式定价表中的价格决定因素列成为PRICE_FACTOR中的行。您的行列式查找表中可能出现的值将成为FACTOR_VALUE中的行。这部分是相同的工作量,除非你发现你需要添加一个新的价格因素,你需要做的就是输入一些新的数据,而不是改变你的表定义,这就是你要反对的星型模式方法。

要将价格点实际固定到其确定因素,请填充COURSE_PRICE_FACTOR以将价格点与定义价格点所需的因子值的最小值相关联。请注意,FACTOR_VALUE由其FK标识为PRICE_FACTOR。这意味着PRICE_FACTOR的PK可以在COURSE_PRICE_FACTOR上找到,作为FK FACTOR_VALUE的一部分。这很重要,因为它可以让您定义价格点ID和价格因素ID组合的唯一索引(我已将该组合作为表格的PK)。这意味着模式将强加限制,即您不能对相同的价格因素具有矛盾的值,这是一个很好的小数据一致性约束。

所有这些看起来似乎很多,所以为什么它比星型模式更好?举一个例子,假设您的星型模式中每个季节,洞,时间和人物都有四种变体。这可能是一个低估,但让我们继续。这意味着每个课程需要4 x 4 x 4 x 4 = 256个记录来跟踪所有定价变化。如果一门课程有一张非常简单的价格卡怎么办,比如说:“淡季就是每天100美元的价格”。这将是我建议的模型中的一个价格点,但星型模式仍然需要1 x 4 x 4 x 4 = 64条记录。

更糟糕的是:使用星型模式,根据您打算如何使用它,您可能有一条规则,即每个查找表值需要在每个课程的定价表中表示。这意味着在季节中添加新记录将需要在每个课程中都有一堆新记录,即使其他课程无法识别您的新维度值。

我建议的模型的主要优点是(i)您可以非常具体和准确地了解特定条件下特定课程的定价,以及(ii)您的数据维护最小化。

这个型号有什么缺点?此模型对于为一个课程与另一个课程设置价格比较图表不是很有帮助。如果您所比较的两个课程的定价结构有很大不同,那么很难找到一种在并排价格比较表中显示价格表的方法。

答案 2 :(得分:0)

概念似乎很好,查询的速度将取决于每个变量的数量,但使用好的索引进行优化应该非常容易,courseidseasonid似乎是快速的候选者。这也很好地为你可以加载到内存中的树结构提供了很快的查找时间。

你在做什么很常见 - 它被称为Star schema,我知道很多金融机构都会以这种方式处理它们的定价。