这样做的最佳方法是什么?为什么?
以下是我数据库设计的一部分,我正在寻找组织这些数据的最佳方法。
"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表中添加两个表,我可以很容易地表示它似乎有点过分了
"Contacts"
id, person_id, lead_id, type, payer
然后我可以将类型设置为1或2,即主要或次要,然后付款人字段将为1或2,这意味着他们要么付款,要么不付款。
以某种方式做到这一点有什么好处,还是有意义呢?
谢谢!
答案 0 :(得分:1)
我不得不承认我对你的要求感到有些困惑,但从字面上解释你说的话似乎会导致以下数据库模型:
Contacts.payer
标志可让您拥有任意数量的付款人,无论其主要状态如何。
在这种情况下,确实不需要单独的Payer
表。
Leads.primary_contact_id
对Contacts
是一个可以使用NULL的FK,这样可以让每个线索有0或1个主要联系人(为了避免0个主要联系人的可能性,你需要一个NOT NULL,但是这会导致一个插入周期,这个周期必须通过延迟约束来解决,这在MySQL中是不受支持的。
但是,这并不能保证主要联系人属于自己的潜在客户(即Contacts.lead_id
可能与Leads.lead_id
不同,即使Contacts.contact_id
匹配Leads.contact_id
)。那是问题吗?如果是,您需要自由应用识别关系和复合PK,这可能是ORM的问题。
单独的PrimaryContacts
表与Leads.primary_contact_id
具有非常相似的效果(假设您的PK正确),甚至会出现允许0主要联系人和潜在客户不匹配的相同问题。从数据库的角度来看,只是拥有一个“向后”的FK更简单,更有效(尽管我不确定从CakePHP的角度来看是否仍然如此)。
不幸的是,我对CakePHP并不熟悉 - 希望你能够自己“翻译”这个模型。