0

我在基于 MySQL 的 Web 应用程序中有三个实体——客户、服务和注释。每个客户可以有多个由不同用户发布的注释。同样,一个服务也可以有多个注释。我想将所有笔记存储在一个表中以便于检索。基本上,除了插入/更新这些表之外,还有很多查询。

以下是数据库架构:

Table: Customer
id - integer
name - varchar
status - varchar

Table: Service
id - integer
name - varchar
status - varchar
price - float

Table: Note
id - integer
note - text
author - integer
type - varchar
cdate - datetime

我准备了两种方法来建立这些表之间的关系:

Approach #1
Table: CustomerNote
id - integer
customer_id - integer (References Customer table)
note_id - integer (References Note table)

Table: ServiceNote
id - integer
service_id - integer (References Service table)
note_id - integer (References Note table)

第二种方法是修改Note表以保存记录的Entity Name和ID。这种方法不使用方法#1中提到的关系

Approach #2
Table: Note
id - integer
note - text
author - integer
type - varchar
cdate - datetime
entity - varchar (possible values are Customer and Service)
entity_id - integer (related to id in the corresponding entity)

第二种方法不需要任何额外的表,但是执行外键关系并不容易。正如我之前所说,查询比插入/更新更多。那么在那种情况下,哪种方法会更理想和更有效?

我还想知道如果我们实施严格的外键关系是否存在任何性能问题。

4

1 回答 1

0

无论如何,第二种方法更好,将索引添加到类型字段。如果您可以将类型转换为整数字段来表示这些值,那就更好了。比如 1 代表服务,2 代表客户。如果你使用整数会更快。但无论如何,这种方法不会满足您的enforce foreign key.

于 2013-07-26T13:10:42.133 回答