我有一个 MySQL 数据库,其中包含 3 个包含主要数据类的表:
companies (company_id)
persons (person_id, company_id)
loans (loan_id, company_id)
“贷款”和“人”都属于公司。公司可以有贷款,公司可以有人员(如董事、员工等)
在几种情况下,其他数据可能属于公司、个人或贷款,例如“笔记”。例如,用户可以添加特定于公司、个人或贷款的“注释”。
还有其他示例,例如“地址”和“电话号码”,它们可以属于公司或个人。
我显然希望有一个数据表,例如“笔记”、“地址”和“电话号码”,但是我正在努力寻找将这些数据与公司、人员和贷款联系起来的最佳方式。
让我们在这里使用“笔记”作为示例。
更好的做法是:
1/ Have 3 extra tables linking 'notes' to companies people and loans:
notes(note_id)
persons_notes(person_id, note_id)
companies_notes(company_id, note_id)
loans_notes (loan_id, note_id)
2/ Have a single table 'entities' which has a primary key entity_id used to link all 3 tables:
entities(entity_id)
persons(person_id, entity_id)
companies(company_id, entity_id)
loans (loan_id, entity_id)
notes (note_id, entity_id)
后者在逻辑上是有道理的,但感觉不对,因为个人和公司是与贷款完全不同的一类数据。不知怎的,感觉很脏。
备注和地址将与贷款、个人和公司建立一对多的关系。也就是说,一家公司可能有很多地址或备注。这就是我考虑链接表的原因。
一家公司可以有一个注册地址和无限的交易地址。一个人可以有一个当前地址和以前的地址(如果当前地址少于 3 年)。
在这种情况下,拥有贷款(商业贷款)的是公司。人属于公司,通常是公司的董事。所以,一家公司可以有很多人和很多贷款。
- 一个公司/个人/贷款每人可以有很多笔记
- 一个公司/个人可以有多个地址