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/

相关文章:

mysql - MySQL CentOS 6 无法设置根密码

mysql 多行查询

c# - 将数据表写入数据库文件,一次一条记录

python - 表的 "id"列指定多个默认值

java - Sqlite 'no such table' 将值插入数据库时​​出错

mysql - 批量更新/替换mysql

mysql - 如何实现拥有超过 64 个成员的 MySQL SET 概念?

mysql - 使用子查询选择最小值

java - 在 IBM Maximo 中使用 SQL 语句,使用 Java

mysql - 将所有表数据从一个模式导入到另一个模式