【问题标题】:CakePHP database design: associations for job boardCakePHP 数据库设计:工作板的关联
【发布时间】:2015-02-25 17:25:26
【问题描述】:

大家好。

我实际上是在用 CakePHP 构建一个工作板,如果能对设计数据库提供一点帮助,我将不胜感激!

我有一张表 jobs 有不同的外键: id, recruiter_id, title, sector_id, division_id, experience_id

关联表(部门、部门和经验)具有相同的配置 id, name and job_count,有时在或两个其他字段上(如部门的 company_count)。

所以我想知道是否有更好的方法来设计这些表格。我想将它们三个放在一个名为 lists 的表中,键为:id, value and list_name。使用此配置,我只需一个请求即可获取所有列表,而不是 3 个。

我的问题是什么是“好方法”解决方案?可能还有一个?

【问题讨论】:

  • 你能澄清一下“部门”、“部门”和“经验”实际上代表什么(非技术术语)吗?这可以帮助了解情况,从而使我们能够提供更好的建议:)
  • 只需为每个实体创建唯一的表。我不确定你认为你将如何执行一个请求而不是三个请求。无论您使用一个表还是 3 个 (因为您有 3 个外键),SQL 都必须有 3 个 JOIN。
  • @Dave:sector是行业(制药、技术等),division是部门(营销、财务等),经验是工作所需的最低经验(1年) , 1 到 3 年等)
  • @AgRizzo:一张表我不需要外键而是直接名称
  • 请展示您的单表解决方案示例,其中包含 listsjobs 的示例数据。

标签: php mysql database cakephp


【解决方案1】:

将它们放在单独的表中似乎有点重复,实际上它们都是相同的东西 - 工作的属性,并且具有非常相似的表结构。

我认为您可以为“job_properties”或其他东西创建一个表。

每个属性都可以有一个唯一的 slug(如果你愿意的话)或者只使用它的 id。

// job_properties table example
id
slug // (optional or could be called "key" if you prefer)
type // (optional - "sector", "division", "min_exp")
name // (for use on the names of things like "marketing" or "technology")
value // (int - for use on things like minimum experience)

那么每个 Job 都会有很多 JobProperty。如果需要,它还允许任何工作拥有多个部门。

这将允许您根据作业是否具有特定属性或一组属性进行拉取,并且看起来整体上更清晰、更统一,同时又不会使其过于模糊。

【讨论】:

  • 感谢您的建议。我也认为第一个解决方案太重复了。您提供的解决方案看起来像是列表解决方案的改进版本。唯一的问题是我的申请人和我的公司也属于部门(候选人可以在就业方面明确自己的意愿,公司可以选择部门)
  • 我不明白为什么这是个问题 他们仍然可能属于 JobProperty。但我会留给你和你的具体应用来确定确切的需求。
【解决方案2】:

我认为通过使用分类系统找到了解决方案。我创建了一个表terms,其中包含所有可以关联的术语列表(部门、部门、合同类型等)。

表格条款 id, name, type

我创建了第二个表 term_relationships,其中包含所有关联,包括关联模型的名称。

term_relationships id, ref, ref_id, term_id

“ref”指的是关联模型(例如:在我的例子中是 Job 或申请人),“ref_id”指的是关联的数据(哪个工作或哪个申请人),term_id 指的是关联的术语。我认为这是最进化和更清洁的解决方案。

感谢大家的帮助(尤其是我从那里得到这个想法的 Grafikart),并希望这个主题可以帮助其他人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多