如何阅读表关系?

时间:2012-02-16 17:19:23

标签: sql database

假设我有一个Customer表和一个Transaction Table,我说Customer to Transaction关系是One to Many。

所以我们可以说“一个客户有很多交易”......

这是我的第一个问题:

但是,当我说...时,这是真的吗?

“很多交易有一个客户”?

这是我的第二个问题:

为了在给定的域中建立关系,两种方式都必须是真的吗?

3 个答案:

答案 0 :(得分:3)

关系是双向的,但每个方向的cardinality不必相同。

在您的示例中,说“一个客户有很多交易”确实是正确的。

但“许多交易有一个客户”并不完全准确。您可以说“每个交易只有一个客户”(假设交易必须有客户),您可以在此之后添加“许多交易可以属于一个客户”,但这两个报表都需要目的是为了准确。


为了完整地描述关系,两组语句都必须为真。

答案 1 :(得分:1)

一对多关系是最常见的关系类型。在这种类型的关系中,表A中的行可以在表B中具有许多匹配的行,但是表B中的行在表A中只能有一个匹配的行。例如,publishers和titles表具有一对一。许多关系:每个出版商都会制作许多出版物,但每个出版物只有一个出版商。

如果只有一个相关列是主键或具有唯一约束,则建立一对多关系。

一对多关系的主键侧由键符号表示。关系的外键侧用无​​穷大符号表示。

这是

的直接引用

Microsoft

编辑:

您所描述的,如果“一次交易有多个客户” - “ - ”客户有多个交易“

是多对多的关系

答案 2 :(得分:1)

通常谈论SQL,我不知道“Have”/“has”是有用的还是标准的或通用的术语。我会说“与...相关”或“有相应的”。

无论如何,如果它是一对多的话,说“所​​有交易都有一个客户”更准确,除非可以进行没有关联客户的交易,在这种情况下你会说“交易所有零或一个客户”< / p>

SQL本身不支持多对多,通常你有一个“链接表”或“关联表”,例如,如果一个事务可以与多个客户关联(比如人们可以进行团购)你可以有一个名为CustomerTransactionAssociation的表,它有两个字段:CustomerID和TransactionID。客户和交易没有任何外键(也就是说,您不能只查看客户记录,看看它与之相关联的内容,或者它是否与任何内容相关联。)

您是否有任何特定的平台或事情需要完成?