用于存储不同供应商的客户评论的正确关系数据库设计是什么?
What is a correct relational database design for storing client reviews for different vedors?
我正在设计一个数据库,我与供应商有一个 table,每个供应商都可以让人们审查它们。
这是我的tables(为了这个问题的目的,我保持简单):
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_id
和 vendor_id
作为外键创建一个名为 vendor_reviews
的 link table 会更好吗?如果是这样,为什么会比现在的设计更好?
是的,构建一个桥梁 table 来表示 n 对 m 的关系是有意义的,这样评论者就可以对同一供应商的每次销售进行评论。但你需要稍微调整一下你的 tables。
评价table
review_id | customer_id | rating | review_text | vendor_id
还有一位顾客Table
customer_id | customer_name .....
另一方面,如果您没有位客户table,您就无法建立n:m关系。
而是保留您的设计,因为它只是供应商和评论之间的一对一关系
不是1:1 -- 每个“1”个供应商都有“很多”评论。所以它是 2 tables 就像@nTuply 开始的那样。
如果您不识别“客户”,则无需为他们提供 table。也就是任何人都可以写评论,编个名字等等。这使得它不many:many.
如果是1:1,你不妨把table组合起来。
1:many (or many:1) -- 注意从“many”(reviews.vendor_id
)到“1”(table vendors
)。您在 vendors
中有一个关于 vendor_id
的索引——即 PRIMARY KEY
。如果您想列出供应商的所有评论,您需要 INDEX
in reviews
。 FOREIGN KEY
是可选的。
1:1 将共享一个主键。
Many:many 需要一个额外的 table,通常不超过两列 -- ids linking 到两个 tables。两个 FOREIGN KEYs
是可选的。更多关于 many:many -- http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table
我正在设计一个数据库,我与供应商有一个 table,每个供应商都可以让人们审查它们。
这是我的tables(为了这个问题的目的,我保持简单):
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_id
和 vendor_id
作为外键创建一个名为 vendor_reviews
的 link table 会更好吗?如果是这样,为什么会比现在的设计更好?
是的,构建一个桥梁 table 来表示 n 对 m 的关系是有意义的,这样评论者就可以对同一供应商的每次销售进行评论。但你需要稍微调整一下你的 tables。
评价table
review_id | customer_id | rating | review_text | vendor_id
还有一位顾客Table
customer_id | customer_name .....
另一方面,如果您没有位客户table,您就无法建立n:m关系。
而是保留您的设计,因为它只是供应商和评论之间的一对一关系
不是1:1 -- 每个“1”个供应商都有“很多”评论。所以它是 2 tables 就像@nTuply 开始的那样。
如果您不识别“客户”,则无需为他们提供 table。也就是任何人都可以写评论,编个名字等等。这使得它不many:many.
如果是1:1,你不妨把table组合起来。
1:many (or many:1) -- 注意从“many”(reviews.vendor_id
)到“1”(table vendors
)。您在 vendors
中有一个关于 vendor_id
的索引——即 PRIMARY KEY
。如果您想列出供应商的所有评论,您需要 INDEX
in reviews
。 FOREIGN KEY
是可选的。
1:1 将共享一个主键。
Many:many 需要一个额外的 table,通常不超过两列 -- ids linking 到两个 tables。两个 FOREIGN KEYs
是可选的。更多关于 many:many -- http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table