sql关系,连接几类

sql relations, connecting several categories

我希望单个估值能够有多个类别(或只有一个)。类别 table 是我预先填充的类别,如葡萄酒等。所以我的问题是如何才能实现这一点?我需要另一个 table 吗?

谢谢!

所以一个 Valuation 有很多 Categories,一个 Category 有很多 Valuations?

这就是我们所说的 many:many 关系,处理它的典型方法是使用另一个 table,ValuationCategory*,它有一对 Id - ValuationId 和 CategoryId

在 Valuation 和 Category 中,Id 是主键。在 ValuationCategory 中,每个 Id 都是两个父 table 的外键。在 ValuationCategory 中,每个 Id 可以出现不止一次,但是一对 id 是唯一的,因此经常用作 ValuationCategory table

的复合主键(两列组成它)
Valuation 1 ----- M ValuationCategory M ----- 1 Category

ValuationCategory 也可以有自己的列,比如“该估值在该类别中首次被认可的日期”。您添加到 ValuationCategory 的列越多,它就越开始成为“table 本身”,就像 Order 在 Person 和 Product 之间是它自己的 table(许多人购买许多产品,order/orderdetail 类型设置映射了两者,但存储了一堆与实际 ordering/fulfillment 过程相关的其他东西)所以有一点 ValuationCategory 可能不再是“table 只是分解 many:many 关系”,可能是关于它可以回答的问题不仅仅是元信息(例如 - “估值何时分类”只是元,但是“有多少分类的原因是 'correction' 作者 X 每年赚多少?”- 如果 VC 知道作者、原因、日期,它获得的外部过程知识比“x 和 y 是相关的”更多。

当它成为一个“合适的”table 时,您可能想给它一个唯一的 ID 列;你不必这样做,但如果你打算将其视为独立实体,如估价或类别,你可能希望它受到相同的对待

总而言之,我敢肯定您已经使用了这样的 table 甚至没有意识到它,它只是有更多的列


* 对我来说,这比 CategoryValuation 更有意义,但这取决于您的观点;如果类别是重要的事情而估值不是那么 CategoryValuation 工作。如果估值是焦点对象,最好先命名它..