回答
你是对的,数据库设计中的常见做法是使用人造主键,如所有行中唯一的“串行”列。
但您的案例中的entity_id就是一个很好的示例,其中列与实体标识关系。将标识关系应用于作为标识表中行的一部分的列。因此它是该表的主键的一部分。
我收到你,你是说如果我们有一个'user_info'表,我们不能把'user_name'作为主键(因为名字可以有相同的值)。所以我们将'user_id'作为主键,但是我们也可以将user_name作为主键的一部分,因为通过名称通常可以帮助我们识别该行。仅当user_id本身不唯一时, – beginner
(user_id,user_name)才是适当的主键。 –
每个实体都有其注释集,由Comment_no
(1,2,3等)标识。因此,不同的实体将具有相同的Comment_no
,并且该属性不能区分所有其他实体中的Entity comment
。相反,对(Entity_id, Comment_no)
可以识别所有其他中的每一个单独的Entity comment
并且可以用作主键。
让我解释清楚。你有两个Entity_ID和COMMENT_NO作为主键,并且两者的组合往往是唯一的。考虑在ENTITY_COMMENT表中,您的值已经为ENTITY = 10和COMMENT_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.
希望你的疑问很清楚。如果不让我知道会澄清你。
如果我们将'comment_no'作为主键,它可以是相同的,例如,如果添加的每个新评论'comment_no'将会不同,例如我们可以将'comment_no'作为'int'' unsigned', 'autoincreament'值(像一个连续的列) – beginner
是的你是对的,因为每一个新的comment_no数据都会被插入。但是你不应该将现有的entity_id和comment_no放在一起。 –
我们可以在数据库设计中看到'comment_no'之前没有用过,所以我怎么才能有现有的价值。并且我们将它作为串行列,然后它如何可以是现有的或相同的 – beginner
在复合键中,我们确保这两个键的组合不会重复。换句话说,组合将唯一标识一个特定的行。
我认为在您的情况下,可能会有多次输入commentno与单个实体id.for避免这种情况,并确保业务完整性组合设置为主键的机会。
- 1. 没有@EmbeddedId的复合键
- 2. SQL表中有复合键和主键
- 3. 有没有办法只返回复合主键的一部分?
- 4. 具有复合主键的实体类没有getter和setter
- 5. 当主键没有主键时,mysql主键重复输入
- 6. 外键必须与引用的主键具有相同的列数。但我没有使用复合键
- 7. 具有空值的JPA复合主键
- 8. 具有复合主键的Yii模型
- 9. SQL Server - 表具有复合主键
- 10. 使用外键保存复合主键
- 11. 使用复合主键作为外键
- 12. 复合主键
- 13. 复合主键
- 14. 复合主键,
- 15. 删除没有主键的重复项
- 16. 表没有主键
- 17. 使用Cloudformation创建具有复合主键的DynamoDB
- 18. 使用复合主键或具有多个刀片
- 19. 使用具有*嵌套*复合主键的@IdClass限制JPA 1.0?
- 20. yii没有显示这个$ model->错误代码 - 使用复合主键
- 21. 创建具有复合主键的表引用两个外键
- 22. 当表没有主键时使用DeleteAllOnSubmit
- 23. 查找后没有使用主键
- 24. 对没有主键的表使用DbUnit
- 25. 复合键没有得到相应ID
- 26. RailsAdmin没有弄清楚复合键
- 27. ManyToMany在休眠没有复合键
- 28. 没有关键属性的复合PK
- 29. 有没有像主键和辅助键?
- 30. 引用复合主键
我认为没有采取复合主键,而是我们只能采取单一主键 – beginner
comment_no是独特的,'自动生成''autoincreament'因此它没有机会是相同的 – beginner