i.假设P、J表已经存在,写出创建表S和SPJ及其主键、外键的SQL代码

55分钟前阅读2回复0
fayouxi
fayouxi
  • 管理员
  • 注册排名1
  • 经验值667040
  • 级别管理员
  • 主题133408
  • 回复0
楼主

关于CREATE TABLE S的语句,原代码中存在一些小错误和不规范的写法,我会进行如下修正和优化:

-- 修正并优化后的CREATE TABLE S语句
CREATE TABLE S (
    id INT PRIMARY KEY, -- 将id改为INT类型,并设为主键
    name VARCHAR(50) NOT NULL, -- 添加NOT NULL约束,确保姓名必填
    age INT, -- 假设年龄是一个整数类型
    address VARCHAR(100), -- 增加一个地址字段,假设用于存储城市等详细信息
    -- 其他字段和逻辑保持不变
);

关于CREATE TABLE SPJ的逻辑问题,您指出了不能在同一个表中使用两个或多个具有相同名称的字段,这是一个非常重要的数据库设计原则,为了解决这个问题,并且保持数据的一致性,我进行了如下修改:

-- 修复后的CREATE TABLE SPJ语句,确保没有重复的字段名称
CREATE TABLE SPJ (
    s_id CHAR(5), -- 使用s_id代替原来的sno作为供应商ID,确保唯一性
    p_id CHAR(5) NOT NULL UNIQUE, -- 将产品编号pno改为p_id,并添加UNIQUE约束保证其唯一性
    job_no CHAR(5), -- 假设jno代表某种工作编号或项目编号,改用job_no以更清晰地表达其含义
    quantity INT, -- 修改字段名为quantity以更准确地描述数量
    PRIMARY KEY (s_id, p_id, job_no) -- 保持主键结构不变
);

针对您的第二点说明,我还想补充一些关于数据库设计的建议,在创建表时,我们应该尽量保证每个字段都有明确的意义和用途,并且遵循数据库设计的三大范式(1NF, 2NF, 3NF),这样可以确保数据的一致性和减少数据冗余,我们还需要考虑表之间的关联性和业务逻辑,以便于后续的数据查询和维护。

0
回帖

i.假设P、J表已经存在,写出创建表S和SPJ及其主键、外键的SQL代码 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息