答案 0 :(得分:1)
你是对的,数据库设计中常见的做法是使用人工主键,例如" serial"所有行都是唯一的列。
但是,您案例中的entity_id是与实体具有识别关系的列的一个很好的示例。标识关系应用于列,该列是您在表中标识行的方式的一部分。因此,它是该表的主键的一部分。
答案 1 :(得分:1)
在复合键中,我们确保这两个键的组合永远不会重复。换句话说,组合将唯一地标识特定行。
我认为在您的场景中,可能有机会针对单个实体ID多次输入commentno。为了避免这种情况并确保业务完整性,将组合设置为主键。
答案 2 :(得分:0)
每个实体都有一组注释,由Comment_no
(1,2,3等)标识。因此,不同的实体将具有相等的Comment_no
,并且此属性无法区分所有其他实体中的Entity comment
。相反,(Entity_id, Comment_no)
对可以识别所有其他Entity comment
中的每个// use struct Analysis* instead of void*
//
void storeDataHere(struct Analysis* res)
{
int i;
// initialize a1;
struct Analysis a1;
a1.a = 1;
// memset(a1.b, 0, 10*sizeof(int)); no need to memset cause you set later
for (i = 0; i < 10; i++)
{
a1.b[i] = 1;
}
// store a1 into ana[0], ana[1];
*res = a1; // assign value of pointer res to a1
}
// pass array struct to function
void saveData(struct Analysis data[])
{
struct Analysis *data_array = data;
// pass two struct elements to storeDataHere;
storeDataHere(&data_array[0]);
storeDataHere(&data_array[1]); // pass pointer of each element to StoreDataHere
}
,并且可以用作主键。
答案 3 :(得分:0)
让我清楚地解释一下。您将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.
希望你的怀疑是明确的。如果不让我知道会澄清你。