0

最好的方法是什么?为什么?

这是我数据库设计的一部分的快速浏览,我正在寻找组织这些数据的最佳方法。

"Leads" has many "Students", Leads has many "Contacts"

"Students" belongs to "Leads" and belongs to "People"
   id, person_id, lead_id

"Contacts" belongs to "Leads" and belongs to "People"
   id, person_id, lead_id

我希望能够表明哪个联系人将成为“付款人”,以及一个联系人是否是主要联系人。

我原本以为我会再添加两个这样的表:

"PrimaryContacts" belongs to "Contacts"
   id, contact_id
"Payer" belongs to "Contacts"
   id, contact_id

然后我意识到添加另外两个表似乎有点过头了,我可以像这样在初始联系人表中轻松表示

"Contacts"
  id, person_id, lead_id, type, payer

然后我可以将类型设置为 1 或 2,表示主要或次要,然后付款人字段将是 1 或 2,表示他们正在支付或不支付。

以一种或另一种方式做这件事有什么好处,或者这有关系吗?

谢谢!

4

1 回答 1

1

我不得不承认我对您的要求有点困惑,但是从字面上解释您所说的似乎会导致以下数据库模型:

在此处输入图像描述


Contacts.payer标志使您可以拥有任意数量的付款人,无论他们的主要状态如何。

在这种情况下,确实不需要单独的Payer表。


Leads.primary_contact_id一个 NULL-able FK Contacts,这让你有 0 或 1 个主要联系人每个潜在客户(为避免 0 个主要联系人的可能性,你需要一个 NOT NULL,但这会导致插入周期,这必须通过延迟约束来解决,这在 MySQL 中不受支持)。

但是,这并不能保证主要联系人属于其自己的潜在客户(即,即使匹配Contacts.lead_id也可能不同)。那是问题吗?如果是,您将需要一个自由的应用程序来识别关系和复合 PK,这可能是 ORM 的一个问题。Leads.lead_idContacts.contact_idLeads.contact_id

单独PrimaryContacts的表将具有与Leads.primary_contact_id(假设您的 PK 正确)非常相似的效果,甚至会出现允许 0 个主要联系人和潜在客户不匹配的问题。从数据库的角度来看,仅仅拥有一个“向后”的 FK 更简单、更有效(尽管我不确定从 CakePHP 的角度来看是否仍然如此)。

不幸的是,我对 CakePHP 并不熟悉——希望你能够自己“翻译”这个模型。

于 2012-07-17T20:34:34.030 回答