gpt4 book ai didi

mysql - 用于跟踪全年销售情况的 SQL 关系数据库

转载 作者:行者123 更新时间:2023-11-29 10:06:01 26 4
gpt4 key购买 nike

我是关系数据库和 MySQL 的新手。我的任务是创建一个可以跟踪全年直至当天的销售情况的应用程序。因此,当员工进行销售时,销售金额和销售日期都会保存在数据库中。

该数据库需要保存当天、每周、每月和每年的当前销售额。它还需要跟踪这些销售额属于哪位员工以及该员工在特定日期的销售额。

我画了一个database diagram并在 MySQL 中建表。我遇到的问题是我听说(通过在线教程等)多对多或联结表不应该有重复。

好吧,我的联结表将是我的销售表。它与进行销售的员工存在多对一的关系,并且与当天进行的销售存在多对一的关系。因此,employee1 在一天内进行了 3 笔销售,我的销售表将如下所示:

sale_id | sale_amount | day_id | employee_id
1 500 1 1
2 600 1 1
3 750 1 1

其中day_id 是当天,employee_id 是employee1。问题 1,这是否很糟糕?如果是,什么是更好的解决方案?

问题 2,确定一年中的日/周/月以跟踪所有这些数据的最佳方法是什么?手动输入每周 7 天、每年 52 周、每年 12 个月似乎过于乏味。我输入了5年,然后第一年输入了12个月,第一年输入了52周,然后停止了,然后添加了几天来到这里,看看是否有更好的解决方案可用。

对此的任何帮助将不胜感激。如果可能的话,我也想在没有任何额外的第三方软件的情况下执行此操作。

非常感谢任何帮助!

最佳答案

不要将日期存储为日期、周、月和年表,而是将日期存储为日期时间类型。您只需要两张 table 。

员工表:

DROP TABLE IF EXISTS `employees`;

CREATE TABLE IF NOT EXISTS `tablename` (
`emp_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`emp_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT 'Name of employee',
`emp_email` VARCHAR(200) NOT NULL DEFAULT '' COMMENT 'Email address of employee',
`emp_password` VARCHAR(200) NOT NULL DEFAULT '' COMMENT 'Password encoded',
PRIMARY KEY (`emp_id`),
UNIQUE `idx_emp_name` (`emp_name`),
UNIQUE `idx_emp_email` (`emp_email`)
)
ENGINE=MyISAM
AUTO_INCREMENT=1
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci
COMMENT 'List of Employees';

销售表:

DROP TABLE IF EXISTS `sales`;

CREATE TABLE IF NOT EXISTS `tablename` (
`sale_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`sale_amount` DOUBLE NOT NULL DEFAULT 0 COMMENT 'Amount Of Sale',
`sale_date` DATETIME NOT NULL DEFAULT '0000-00-00' COMMENT 'Date/Time of sale',
`sale_emp_id` INT(11) NOT NULL COMMENT 'FK To employees',
PRIMARY KEY (`sale_id`),
KEY `idx_sale_date` (`sale_date`),
KEY `idx_sale_emp_id` (`sale_emp_id`)
)
ENGINE=MyISAM
AUTO_INCREMENT=1
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci
COMMENT 'List of Employees';

-- ==============================================================================================
-- TRIGGER: Update sale_date timestamp on sales
-- ==============================================================================================
DELIMITER |

DROP TRIGGER IF EXISTS `sales_CreatedTS`|

CREATE TRIGGER `sales_CreatedTS` BEFORE INSERT ON `sales`
FOR EACH ROW
BEGIN
SET NEW.`sale_date` = CURRENT_TIMESTAMP;
END|

DELIMITER ;

从这些表格中,您可以按您需要的任何期间类型生成任何报告。

例如,您可以按员工和周生成一份包含小计的报告,如下所示:

SELECT
a.`emp_name`,
WEEK(b.`sale_date`) as `week_no`,
SUM(b.`sale_amount`) as `total_sales_for_week`
FROM `employees` a
JOIN `sales` b
ON a.`emp_id` = b.`sales_emp_id`
GROUP BY WEEK(b.`sale_date`),a.`emp_id` WITH ROLLUP;

有关 MySQL 日期函数的更多信息,请查看此 reference 。使用这些功能,您可以按星期、日期、周、月和年生成报告。

关于mysql - 用于跟踪全年销售情况的 SQL 关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com