mysql - 了解弱实体和弱关系

标签 mysql sql database erd

如果我有以下 ERD:

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

   |
 <<contains>>

   |
   m
--------
--------                             ---------
||Line  ||  1 --- <<has a>> --- 1  | prod     |
--------                            ----------
--------

如果 Line 是弱实体,并且 containshas a 是弱关系,那么 Line 的主键是什么样的?

我一直在网上查找,我想这将是一个复合主键,其中包含:

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

谁能帮帮我吗?我对吗?我哪里出错了?等等

最佳答案

I've been looking online and I'd like to think it would be a composite primary key consisting of:

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

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

实际上,我不会在“Inv”“Line”中使用自动递增 ID 号。自动递增 ID 号可能会留下空白,而会计师讨厌空白。推而广之,数据库人员也讨厌这些数字中的差距。 (我们是那些因“丢失”行而受到指责的人。)

您在存储产品的 ID 号时也需要小心。如果产品名称发生变化,则所有过去的发票上的名称都会发生变化。这是在法庭上攻击法官的好方法。

关于mysql - 了解弱实体和弱关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074590/

相关文章:

数据库设计 : Join table with extra column or, 两个连接表

php - MySQL STR_TO_DATE 函数暂时不起作用

mysql - 无法安装 MySQL UDF

mysql - 如何在 XAMPP 中恢复 mysql 数据库?

MySQL 触发插入文本进入无限循环

java - 敏感可滚动结果集不反射(reflect) Oracle 数据库中的数据库更改

sql - 为什么 Entity Framework 生成的查询运行时间是直接运行相同查询的两倍?

php - 查询前设置最后一个ID的值

php - 将输入保存到数据库

mysql - 将表名从小写更改为大写