为不同供应商存储客户评论的正确关系数据库设计是啥?

Posted

技术标签:

【中文标题】为不同供应商存储客户评论的正确关系数据库设计是啥?【英文标题】:What is a correct relational database design for storing client reviews for different vedors?为不同供应商存储客户评论的正确关系数据库设计是什么? 【发布时间】:2021-09-15 19:06:59 【问题描述】:

我正在做一个数据库设计,我有一个包含供应商的表格,每个供应商都可以让人们审查它们。

这是我的表格(出于这个问题的目的,我保持简单):

vendor_table

vendor_id | vendor_name | vendor_location | vendor_email       | vendor_phone
1         | User One    | LocationOne     | emailOne@test.com  | 000000001
2         | User Two    | LocationTwo     | emailTwo@test.com  | 000000002

reviews_table

review_id | customer_name | rating | review_text | vendor_id
1         | Customer One  | 5      | mediumtext  | 2
2         | Customer Two  | 2      | mediumtext  | 1
3         | Customer 3    | 5      | mediumtext  | 2
4         | Customer 4    | 5      | mediumtext  | 2

我的问题是:这有意义吗?使用review_idvendor_id 作为外键创建一个名为vendor_reviews 的链接表会更好吗?如果是这样,为什么它会比现在的设计更好?

【问题讨论】:

【参考方案1】:

是的,构建一个桥接表来表示 n 对 m 关系是有意义的,这样审阅者就可以对每次销售的同一供应商进行审阅。但您需要稍微调整一下表格结构。

审查表

review_id | customer_id | rating | review_text | vendor_id

还有一个客户表

customer_id | customer_name .....

另一方面,如果您有 no 客户表,则不能有 n:m 关系。

而是保留您的设计,因为它只是供应商和审查之间的一对一关系

【讨论】:

我很难理解 n-m 关系。在我的情况下,审阅者将类似于博客上的公共评论部分。因此,任何人都可以提交评论。我在想的是每个评论者(因为他们实际上没有帐户)只会发布评论并将 vendor_id 放在同一行中。但我似乎无法弄清楚桥表 vendor_reviews 的意义(尽管我知道一个供应商可以有多个评论)。你有什么想法? 如果你有 no customer 表,你不能在 review 和 vendor 之间建立 n:m 关系,因为你在 review 和 vendor 之间是 1:1 的 这很有意义。谢谢!【参考方案2】:

不是 1:1 - 每个“1”供应商都有“许多”评论。所以它是 2 个像 @nTuply 一样的表。

如果您不识别“客户”,则无需为他们提供表格。也就是说,任何人都可以写评论、起名字等。这使得它不是很多:很多。

如果是 1:1,你也可以合并表格。

1:many(或 many:1)——注意“many”(reviews.vendor_id)中的每一行到“1”(表vendors)的链接。您在vendors 中的vendor_id 上有一个索引——即PRIMARY KEY。如果要列出供应商的所有评论,则需要在 reviews 中添加 INDEXFOREIGN KEY 是可选的。

1:1 将共享一个主键。

Many:many 需要一个通常不超过两列的额外表——链接到这两个表的 id。两个FOREIGN KEYs 是可选的。更多关于 many:many -- http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

【讨论】:

以上是关于为不同供应商存储客户评论的正确关系数据库设计是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Spinfire是啥东西啊?

Oracle EBS 的接口方式是啥样的?与 DBLINK 有啥不同

mysql和mongodb的关系区别是啥

SAP是啥意思

Mongo 架构设计

can通信系统是啥意思