mysql - 书店的最佳销售数据库结构

标签 mysql database algorithm performance database-design

我有两个数据库结构:

#1:每本书都是一行:

// sale 
+----+---------+-------------+
| id | book_id | customer_id |
+----+---------+-------------+
| 1  | 5       | 123         |
| 2  | 5       | 123         |
| 3  | 9       | 123         |
| 4  | 4       | 456         |
| 5  | 12      | 456         |
+----+---------+-------------+

#2:有一个数字列:

// sale 
+----+---------+-------------+--------+
| id | book_id | customer_id | number |
+----+---------+-------------+--------+
| 1  | 5       | 123         | 2      |
| 2  | 9       | 123         | 1      |
| 3  | 4       | 456         | 1      |
| 4  | 12      | 456         | 1      |
+----+---------+-------------+--------+

正如你所看到的,第一个对于每本书都有不同的存在(这对将来的一些想法有好处,即需要归还日期的归还图书,或者对多次购买的图书给予一些折扣)同一本书或其他什么)。但第二个似乎更优化,因为它的行数较少。

无论如何,您推荐哪一个?我个人喜欢第一个,只是担心冗余。第一个结构有冗余吗?

最佳答案

在我看来,第一个解决方案是正确的。 (第二个是错误的)

原因:
根据您的解释,每笔销售都是一个新的有效对象(或记录),具有自己的数据自己的存在

正如你所说,每个销售对象(记录)都有book_id、customer_id、sale_date、seller_id(或employee_id)、sale_price、sale_discount、sale_description、sale_ payment_method等。

只有 book_id 和 customer_id 看起来是共同的(当一个客户浏览同一本书两次或更多次时),并且绝对不是冗余。

如果您将它们合并为第二个解决方案,那么您在设计其余部分和实现时会遇到很多困难。

对您的设计进行一点改进:
您可以拥有两个实体,例如 purchase_invoicepurchase_invoice_row,然后您可以在purchase_invoice_row 中拥有多个销售量。 (当时销售的任何书籍的数量)。我的意思是最好用两个实体来管理销售信息。 (没有一个)

关于mysql - 书店的最佳销售数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817614/

相关文章:

database - 交换Oracle数据库中两个表的外键

c# - 处理一个单词,使用字符串或字符数组或字符串构建器陷入困境?

python - Python 中阶乘函数的问题(参见代码)

mysql - 如何更改mysql工作台中主键字段的数据类型?

MySQL 按中间表中的匹配数排序

mongodb - 如何在 MongoDB 中将集合导出到 CSV?

c# - 如何使用 PictureBox 打开/关闭相机

php - 检索存储在 php 变量数组中的 mysql 表数据

mysql - GROUP_CONCAT 改变 GROUP BY 顺序

mysql - 使用 Pentaho 将数据从 SQL/Oracle 迁移到 Cassandra