2013-07-26 34 views
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) 

第二种方法是修改注表保存实体名称和记录的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) 

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

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

回答

0

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

相关问题