繁体   English   中英

我是否正确编写了这个脚本? (SQL)

[英]Am I writing this script correctly? (SQL)

所以我正在为图书馆系统编写一个 SQL 脚本。 我有一个成员表,但成员表包括员工、图书管理员、学生等,因此对于属性 mem_id,它可以分别是 (STF001、LIB001、STU001) 员工、图书管理员和学生。 但我还必须分别创建 Staff、Librarian 和 Students 表。 我该怎么做? 这是我到目前为止所拥有的,

DROP TABLE MEMBER CASCADE CONSTRAINTS;
DROP TABLE STAFF CASCADE CONSTRAINTS;
DROP TABLE STUDENT CASCADE CONSTRAINTS;
DROP TABLE LIBRARIAN CASCADE CONSTRAINTS;
DROP TABLE BOOK_DETAIL CASCADE CONSTRAINTS

CREATE TABLE MEMBER 
(
    mem_id      VARCHAR2(8)  NOT NULL, 
    mem_fname   VARCHAR2(10) NOT NULL,
    mem_lname   VARCHAR2(20) NOT NULL,
    mem_email   VARCHAR2(50) NOT NULL,
    mem_mobile  VARCHAR2(10) NOT NULL,
    mem_pass    VARCHAR2(20) NOT NULL,
    mem_status  VARCHAR2(1)  NOT NULL, 

    CONSTRAINT mem_id_pk PRIMARY KEY(mem_id),
)

CREATE TABLE STAFF
(
    Staff_id  VARCHAR2(8) NOT NULL,
    Branch_id VARCHAR2(8) NOT NULL,

    CONSTRANT staff_id_pk PRIMARY KEY(staff_id) 
    CONSTRANT branch_id_fk 
        FOREIGN KEY(branch_id) REFERENCES lib_branch(branch_id)
)

我这样做对吗? 因为我觉得我需要用成员表来引用员工表,还是不需要?

我在这里先向您的帮助表示感谢

我这样做对吗?

你不。


正如您所说,图书馆的“成员”可以是工作人员、图书管理员、学生 那应该只是members表中的一列,引用另一列(我们称之为member_type )。 像这样:

create table member_type
  (member_type_id    number       constraint pk_memtyp primary key,
   name              varchar2(20) not null
  );

insert into member_type (member_type_id, name) 
  select 1, 'staff'     from dual union all
  select 2, 'librarian' from dual union all
  select 3, 'student'   from dual;
  

create table member
  (mem_id            number       constraint pk_mem primary key,
   ...
   member_type_id    number       constraint fk_mem_type references
                                    member_type (member_type_id)
                                    not null,
   ...
  );

为什么是这样的model? 因为 - 如果出现另一个“成员类型”怎么办? 您会创建另一个表,修改应用程序以支持它吗? 可以,但你不应该

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM