Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 理解弱实体和弱关系_Mysql_Sql_Database_Erd - Fatal编程技术网

Mysql 理解弱实体和弱关系

Mysql 理解弱实体和弱关系,mysql,sql,database,erd,Mysql,Sql,Database,Erd,如果我有以下ERD: ------ |Inv | --------- 1 | <<contains>> | m -------- -------- --------- ||Line || 1 --- <<has a>> --- 1 | prod | -------- ---------- -

如果我有以下ERD:

 ------
|Inv   |
---------
   1

   |
 <<contains>>

   |
   m
--------
--------                             ---------
||Line  ||  1 --- <<has a>> --- 1  | prod     |
--------                            ----------
--------
有人能帮我吗?我说得对吗?我哪里出错了?等等

我一直在网上寻找,我想它应该是一个复合主键,包括:

PK = (ID from line, Primary Key from Inv, Primary Key from Prod)
否,Inv的主键和行项目编号足以标识表“行”中的行。如果您想要实现进一步的业务需求——每个产品在每个发票上只能出现一次——您可以对{value from Inv,value from Prod}列对进行额外的唯一约束

实际上,我不会在“Inv”或“Line”中使用自动递增的id号。自动递增的id号可能会留下间隙,而会计师讨厌间隙。从广义上讲,数据库用户也讨厌这类数字的差距。(我们因“丢失”行而受到指责。)

您还需要注意存储产品的id号。如果产品名称发生更改,则在所有过去的发票上都会显示更改。这是在法庭上站在法官不利一边的好方法

PK = (ID from line, Primary Key from Inv, Primary Key from Prod)