涉及多个实体时的数据库建模

时间:2013-07-26 12:57:58

标签: mysql database database-design relational-database

我在基于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表以保存记录的实体名称和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)

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

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

1 个答案:

答案 0 :(得分:0)

无论如何,在将类型字段添加到索引的情况下,第二种方法更好。 如果您可以将类型转换为整数字段来表示这些值,那会更好。比如1为Seevice,2为for Customent。如果使用整数会更快。但无论如何,这种方法不能满足你的enforce foreign key