写一个艺人管理系统至少有三个表(三表之间有关系),创建一个触发器和两个带参存储过程,并且编写初始化程序
时间: 2024-02-19 17:58:45 浏览: 20
好的,下面是一个艺人管理系统的三个表及其关系:
1. 艺人表(Artist)
- 艺人ID(ArtistID)
- 艺人姓名(Name)
- 艺人性别(Gender)
- 艺人出生日期(Birthdate)
- 艺人国籍(Nationality)
2. 合同表(Contract)
- 合同ID(ContractID)
- 艺人ID(ArtistID)
- 合同开始日期(StartDate)
- 合同结束日期(EndDate)
- 合同费用(Fee)
3. 日程表(Schedule)
- 日程ID(ScheduleID)
- 艺人ID(ArtistID)
- 日程日期(ScheduleDate)
- 日程地点(Location)
- 日程内容(Content)
艺人表和合同表之间是一对多的关系,即一个艺人可以有多个合同;艺人表和日程表之间也是一对多的关系,即一个艺人可以有多个日程安排。
接下来,我们为艺人表创建一个触发器,用于在添加、修改、删除艺人信息时自动更新相关数据:
```sql
CREATE TRIGGER update_artist_info
AFTER INSERT, UPDATE, DELETE ON Artist
FOR EACH ROW
BEGIN
DECLARE artist_id INT;
SET artist_id = NEW.ArtistID;
-- 更新合同表中的艺人姓名
UPDATE Contract SET ArtistName = NEW.Name WHERE ArtistID = artist_id;
-- 更新日程表中的艺人姓名
UPDATE Schedule SET ArtistName = NEW.Name WHERE ArtistID = artist_id;
END;
```
该触发器会在艺人表中添加、修改、删除数据时自动触发,更新合同表和日程表中的艺人姓名。
接下来,我们编写两个带参存储过程,用于查询合同信息和日程信息:
```sql
CREATE PROCEDURE get_contracts(IN artist_name VARCHAR(255))
BEGIN
SELECT ContractID, Name, StartDate, EndDate, Fee
FROM Contract
WHERE ArtistName = artist_name;
END;
CREATE PROCEDURE get_schedules(IN artist_name VARCHAR(255))
BEGIN
SELECT ScheduleID, ScheduleDate, Location, Content
FROM Schedule
WHERE ArtistName = artist_name;
END;
```
以上两个存储过程分别接收一个参数 artist_name,用于查询该艺人的合同信息和日程信息。
最后,我们编写一个初始化程序,用于创建上述三个表、触发器和存储过程:
```sql
CREATE DATABASE IF NOT EXISTS artist_management_system;
USE artist_management_system;
-- 创建艺人表
CREATE TABLE IF NOT EXISTS Artist (
ArtistID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Gender VARCHAR(10) NOT NULL,
Birthdate DATE NOT NULL,
Nationality VARCHAR(50) NOT NULL
);
-- 创建合同表
CREATE TABLE IF NOT EXISTS Contract (
ContractID INT PRIMARY KEY AUTO_INCREMENT,
ArtistID INT NOT NULL,
ArtistName VARCHAR(255) NOT NULL,
StartDate DATE NOT NULL,
EndDate DATE NOT NULL,
Fee DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ArtistID) REFERENCES Artist(ArtistID)
);
-- 创建日程表
CREATE TABLE IF NOT EXISTS Schedule (
ScheduleID INT PRIMARY KEY AUTO_INCREMENT,
ArtistID INT NOT NULL,
ArtistName VARCHAR(255) NOT NULL,
ScheduleDate DATE NOT NULL,
Location VARCHAR(255) NOT NULL,
Content VARCHAR(255) NOT NULL,
FOREIGN KEY (ArtistID) REFERENCES Artist(ArtistID)
);
-- 创建触发器
CREATE TRIGGER update_artist_info
AFTER INSERT, UPDATE, DELETE ON Artist
FOR EACH ROW
BEGIN
DECLARE artist_id INT;
SET artist_id = NEW.ArtistID;
-- 更新合同表中的艺人姓名
UPDATE Contract SET ArtistName = NEW.Name WHERE ArtistID = artist_id;
-- 更新日程表中的艺人姓名
UPDATE Schedule SET ArtistName = NEW.Name WHERE ArtistID = artist_id;
END;
-- 创建存储过程
CREATE PROCEDURE get_contracts(IN artist_name VARCHAR(255))
BEGIN
SELECT ContractID, Name, StartDate, EndDate, Fee
FROM Contract
WHERE ArtistName = artist_name;
END;
CREATE PROCEDURE get_schedules(IN artist_name VARCHAR(255))
BEGIN
SELECT ScheduleID, ScheduleDate, Location, Content
FROM Schedule
WHERE ArtistName = artist_name;
END;
```
以上是一个简单的艺人管理系统的实现,你可以根据实际需求进行修改和扩展。