sql小记,20250319

ps:基于sqlserver

一、绩效管理系统表设计

1.表设计

Users用户表:包含id,用户名,密码。
AppraisalBases评价(职位基数)表:包含职位id,职位年终奖基数
AppraisalCoeffcients评价系数表:包含类别id, 类别(迟到、早退、加班)、系数(0.1、0.2)、指数(1,-1)
UserAppraisals用户评价表(用户迟到了多少次,加班多少次):包含用户id,评价系数id,迟到次数,早退,加班次数。

2.对应sql

新建用户:

INSERT INTO Users (UserName, Password) VALUES ('JohnDoe', 'SecurePass123');    

更新用户表:

UPDATE Users SET PassWord=@PassWord,UserName=@UserName WHERE Id = @Id

查询用户和职位的关系:(1、2表联查)

SELECT u.Id,u.UserName,u.Sex,u.BaseTypeId,u.IsDel,a.AppraisalBase,a.BaseType From Users u LEFT JOIN AppraisalBases a ON u.BaseTypeId = a.Id

查询用户迟到了多少次:(3、4表联查)

SELECT ua.*,ac.AppraisalType,ac.AppraisalCoefficient,ac.CalculationMethod FROM UserAppraisals ua LEFT JOIN AppraisalCoefficients ac ON ua.CoefficientId = ac.Id

四个表一起联查,根据某教学视频,发现是把1、2表联查结果和3、4表联查结果给遍历合并。应该也可以四表联查。

二、学生选课四表联查

1.表设计

假设存在四个表,分别是 Students、Courses、Enrollments 和 Teachers,它们的结构和关联关系如下:
Students 表存储学生信息,包含 StudentID(学生编号,主键)和 StudentName(学生姓名)。
Courses 表存储课程信息,包含 CourseID(课程编号,主键)和 CourseName(课程名称)。
Enrollments 表存储学生选课信息,包含 EnrollmentID(选课编号,主键)、StudentID(外键,关联 Students 表的 StudentID)和 CourseID(外键,关联 Courses 表的 CourseID)。
Teachers 表存储教师信息,包含 TeacherID(教师编号,主键)、TeacherName(教师姓名)和 CourseID(外键,关联 Courses 表的 CourseID)。

2.对应sql

SELECT 
    s.StudentName,
    c.CourseName,
    t.TeacherName
FROM 
    Students s
JOIN 
    Enrollments e ON s.StudentID = e.StudentID
JOIN 
    Courses c ON e.CourseID = c.CourseID
JOIN 
    Teachers t ON c.CourseID = t.CourseID;    

三、左连接,右连结、内连接的区别

JOIN(内连接):只返回两个表中匹配的记录。
LEFT JOIN(左外连接):返回左表的所有记录以及右表中匹配的记录,右表无匹配记录时显示 NULL。
RIGHT JOIN(右外连接):返回右表的所有记录以及左表中匹配的记录,左表无匹配记录时显示 NULL。
在实际使用中,可根据具体的查询需求选择合适的连接类型。若需要获取所有记录,可考虑使用外连接;若只需匹配的记录,则使用内连接。

### Kettle Scheduler 配置方法及最佳实践 Kettle Scheduler 是一款基于 Spring、Spring MVC 和 BeetlSQL 的调度监控平台,用于管理和调度由 Kettle 客户端创建的作业 (Job) 和转换 (Transformation)[^1]。以下是关于 Kettle Scheduler 的配置方法和最佳实践: #### 1. 环境准备 在开始配置之前,确保以下环境已正确安装并运行: - Java JDK 8 或更高版本。 - Maven 构建工具(如果需要从源码编译)。 - 数据库支持:MySQL 或其他兼容数据库。 - Tomcat 或其他支持 Servlet 的应用服务器。 #### 2. 下载与部署 可以从项目地址下载 Kettle Scheduler 的代码或直接获取预构建的 WAR 文件[^1]。将 WAR 文件放置到 Tomcat 的 `webapps` 目录下,并确保 Tomcat 的配置文件中包含以下内容以支持热加载和调试功能[^2]: ```xml <Context path="/kettle-scheduler" docBase="kettle-scheduler" reloadable="true" debug="0" privileged="true"> </Context> ``` #### 3. 数据库配置 编辑 `application.properties` 文件,配置数据库连接信息。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/kettle_scheduler?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 确保数据库已初始化,可以参考项目文档中的 SQL 脚本完成表结构的创建[^1]。 #### 4. Quartz 配置 Quartz 是 Kettle Scheduler 中的核心调度组件。可以通过修改 `quartz.properties` 文件调整调度器的行为。例如: ```properties org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` #### 5. Kettle API 集成 Kettle Scheduler 使用 Kettle 提供的 API 来执行 Job 和 Transformation。确保项目的依赖中包含 Kettle 的相关 JAR 包。例如,在 `pom.xml` 中添加以下依赖项: ```xml <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>9.1.0.0-324</version> </dependency> ``` #### 6. 启动与访问 启动 Tomcat 并通过浏览器访问 Kettle Scheduler 的管理界面。默认路径为 `http://localhost:8080/kettle-scheduler`。登录后即可进行作业和转换的调度与监控。 #### 7. 最佳实践 - **性能优化**:根据实际需求调整 Quartz 的线程池大小,避免因线程不足导致任务积压[^1]。 - **日志管理**:启用详细的日志记录以便排查问题,同时定期清理过期日志以节省存储空间。 - **安全性**:配置 HTTPS 访问以保护敏感数据传输,并使用强密码策略加强用户账户的安全性。 - **备份机制**:定期备份数据库和 Kettle 文件,防止数据丢失。 ```python # 示例:通过 Python 调用 Kettle API 执行一个简单的转换 from subprocess import Popen, PIPE command = [ "pan.bat", "-file=/path/to/your/transformation.ktr", "-level=Basic" ] process = Popen(command, stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() if process.returncode == 0: print("Transformation executed successfully.") else: print(f"Error occurred: {stderr.decode('utf-8')}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值