[英]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.