【发布时间】:2013-06-20 10:44:22
【问题描述】:
我正在设计一个数据库(用于 mysql),它允许为名为 nodes 的实体提供新的用户定义属性。
为此,我创建了另外 2 个表。一个包含所有自定义属性的 customvars 表和一个定义 nodes 和 customvars 之间关系的 *nodes_customvars*,创建一个 1..n 和 n ..1 关系。
这是他绘制模型的链接:Sketched database model
到目前为止一切顺利...但我无法正确处理每个表使用单独 ID 的 INSERT 和 UPDATE。
例如,如果我在 *nodes_customvars* 表中为特定 node 插入了一个名为 color 的自定义属性,如果我尝试“INSERT ... ON DUPLICATE KEY UPDATE" 要么总是插入,要么总是更新。
我考虑过从 *nodes_customvars* 表中删除“ID”字段,并使用 nodes id 和 customvars em> id,但我不确定这是否是最好的解决方案......
我读过这篇文章,还有 cmets:http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
什么是最好的解决方案?
编辑:
补充:我不知道 *nodes_customvars* id,只有 nodes id 和 customvars id。分析 *nodes_customvars* 表:
1- 如果我在此表中使 nodes id 和/或 customvars id 唯一,使用“ INSERT ... ON DUPLICATE KEY UPDATE”将始终更新。由于多个nodes可以共享同一个customvar,这是错误的;
2- 如果我不创建任何唯一键,“INSERT ... ON DUPLICATE KEY UPDATE”将始终插入,因为在语句中没有找到唯一键...
【问题讨论】:
-
nodes_customvars 描述了节点和自定义变量之间的多对多关系。所以从技术上讲,nodes_customvars 的 PK 应该是一个复合键
标签: mysql database database-design