我有两个数据库结构:
#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_invoice 和 purchase_invoice_row,然后您可以在purchase_invoice_row 中拥有多个销售量。 (当时销售的任何书籍的数量)。我的意思是最好用两个实体来管理销售信息。 (没有一个)
关于mysql - 书店的最佳销售数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48817614/