Sql server 多对多关系,但不允许重复记录

Sql server 多对多关系,但不允许重复记录,sql-server,database,many-to-many,foreign-key-relationship,Sql Server,Database,Many To Many,Foreign Key Relationship,我正在尝试设计一个数据库,其中有一个注释表、项目表和属性表。每个项目可以有一个或多个注释和相同的属性逻辑,但不允许对属性和项目有相同的注释。 表名:注释 commentID PK不为空, commentBody不为空 表名:项目 projectID PK不为空, 项目名称不为空, 项目类型不为空, 项目状态不为空, …更多 表名称:属性 propertyID主键不为空, propertyName不为空, propertySize不为空, PropertyLandOrd不为空, …更多 表名

我正在尝试设计一个数据库,其中有一个注释表、项目表和属性表。每个项目可以有一个或多个注释和相同的属性逻辑,但不允许对属性和项目有相同的注释。

表名:注释
commentID PK不为空,
commentBody不为空

表名:项目
projectID PK不为空,
项目名称不为空,
项目类型不为空,
项目状态不为空,
…更多

表名称:属性
propertyID主键不为空,
propertyName不为空,
propertySize不为空,
PropertyLandOrd不为空,
…更多

表名:PropertyComments
propertyCommentsID主键不为空,
commentsID FK不为空,
属性ID FK不为空

表名:ProjectComments
projectCommentsID PK不为空,
commentsID FK不为空,
projectID FK不为空


所以,使用这种方法,您可以重复一条注释,假设CommentID1可以用于项目和属性。我该怎么做才能不允许重复注释?

为什么要为注释创建三个单独的表,只创建一个表作为注释 包含以下列:

commentID PK不为空

注释体不为空

类型(无论是财产还是项目)

projectd FK不为空

propertyID FK不为空


然后可以使用存储过程填充它们。

我最终选择了基于数据库设计最佳实践的联接表

更新-需求有点变化,关系应该是一对多。因此,一个项目可能有一个或多个注释,这些项目不能共享相同的注释。

NitheshKHP-使用这种方法,我将在propertyID列或projectID列中具有空值。e、 g.1;'评论在这里';项目104; 无效的我想Null FK对性能不好。请用“-”或类似的字符替换Null。