2016-09-10 70 views
0

enter image description here有没有使用复合主键?

ENTITY _COMMENT表为什么我们选择Entity_IDCOMMENT_NO复合主键代替,为什么我们不能采取只COMMENT_NO作为主键。

+0

我认为没有采取复合主键,而是我们只能采取单一主键 – beginner

+0

comment_no是独特的,'自动生成''autoincreament'因此它没有机会是相同的 – beginner

回答

1

你是对的,数据库设计中的常见做法是使用人造主键,如所有行中唯一的“串行”列。

但您的案例中的entity_id就是一个很好的示例,其中列与实体标识关系。将标识关系应用于作为标识表中行的一部分的列。因此它是该表的主键的一部分。

+0

我收到你,你是说如果我们有一个'user_info'表,我们不能把'user_name'作为主键(因为名字可以有相同的值)。所以我们将'user_id'作为主键,但是我们也可以将user_name作为主键的一部分,因为通过名称通常可以帮助我们识别该行。仅当user_id本身不唯一时, – beginner

+0

(user_id,user_name)才是适当的主键。 –

0

每个实体都有其注释集,由Comment_no(1,2,3等)标识。因此,不同的实体将具有相同的Comment_no,并且该属性不能区分所有其他实体中的Entity comment。相反,对(Entity_id, Comment_no)可以识别所有其他中的每一个单独的Entity comment并且可以用作主键。

+0

在这种情况下,一个用户只能在一个实体 – beginner

+0

@beginner上评论一次,每次添加新评论时,即使它来自同一个用户,也会收到一个新的comment_no,因此任何用户都可以评论任何数量的倍。 – Renzo

+0

然后comment_no将永远是唯一的,对于哪些评论你说的评论有相同的'comment_no',请告诉我。 – beginner

0


让我解释清楚。你有两个Entity_ID和COMMENT_NO作为主键,并且两者的组合往往是唯一的。考虑在ENTITY_COMMENT表中,您的值已经为ENTITY = 10COMMENT_NO = 20。我会举几个例子,

If you try to insert a value as, 

Entity_ID COMMENT_NO 
10   5   - Data will be inserted because COMMENT is not 20   
6   20   - Data will be inserted because Entity_id is not 10   
10   20   - Here data will not be inserted because the combination of Entity_ID and COMMENT_NO is same. 

希望你的疑问很清楚。如果不让我知道会澄清你。

+0

如果我们将'comment_no'作为主键,它可以是相同的,例如,如果添加的每个新评论'comment_no'将会不同,例如我们可以将'comment_no'作为'int'' unsigned', 'autoincreament'值(像一个连续的列) – beginner

+0

是的你是对的,因为每一个新的comment_no数据都会被插入。但是你不应该将现有的entity_id和comment_no放在一起。 –

+0

我们可以在数据库设计中看到'comment_no'之前没有用过,所以我怎么才能有现有的价值。并且我们将它作为串行列,然后它如何可以是现有的或相同的 – beginner

1

在复合键中,我们确保这两个键的组合不会重复。换句话说,组合将唯一标识一个特定的行。

我认为在您的情况下,可能会有多次输入commentno与单个实体id.for避免这种情况,并确保业务完整性组合设置为主键的机会。