创建SQL数据库。具有多个主键和外键

时间:2020-01-21 22:19:12

标签: sql sql-server

我目前正在完成一项分配,要求我使用SQL Server Express创建SQL数据库。这是它的要求: CREATE DATABASE USING SQL

这是我尝试运行的代码;

CREATE DATABASE db_Library
Go

USE db_Library

CREATE TABLE tbl_library_branch 
(
    library_branch_branch_id INT PRIMARY KEY NOT NULL IDENTITY (1,1),
    library_branch_branch_name VARCHAR(50) NOT NULL,
    library_branch_address VARCHAR(50) NOT NULL
);

CREATE TABLE tbl_publisher 
(
    library_publisher_publisher_name VARCHAR(50) PRIMARY KEY NOT NULL,
    library_publisher_address VARCHAR(50) NOT NULL,
    library_publisher_phone INT NOT NULL
);

CREATE TABLE tbl_books 
(
    library_books_book_id INT PRIMARY KEY NOT NULL IDENTITY (1,1),
    library_books_title VARCHAR(50) NOT NULL,
    library_books_publisher_name VARCHAR(50) NOT NULL CONSTRAINT fk_library_books_publisher_name FOREIGN KEY REFERENCES tbl_publisher(library_publisher_publisher_name) ON UPDATE CASCADE ON DELETE CASCADE
);

CREATE TABLE tbl_book_authors 
(
    library_book_authors_book_id INT NOT NULL CONSTRAINT fk_library_book_authors_book_id FOREIGN KEY REFERENCES tbl_books(library_books_book_id) ON UPDATE CASCADE ON DELETE CASCADE,
    library_book_authors_author_name VARCHAR(50) NOT NULL
);

CREATE TABLE tbl_book_copies 
(
    library_book_copies_book_id INT NOT NULL CONSTRAINT fk_library_book_copies_book_id FOREIGN KEY REFERENCES tbl_books(library_books_title),
    library_book_copies_branch_id INT NOT NULL,
    library_book_copies_number_of_copies INT NOT NULL
);

CREATE TABLE tbl_book_loans 
(
    library_book_loans_book_id INT NOT NULL,
    library_book_loans_branch_id INT NOT NULL,
    library_book_loans_card_no INT NOT NULL,
    library_book_loans_date_out INT NOT NULL,
    library_book_loans_date_due INT NOT NULL
);

CREATE TABLE tbl_borrower 
(
    library_borrower_card_no INT PRIMARY KEY NOT NULL IDENTITY (1,1),
    library_borrower_name VARCHAR(50) NOT NULL,
    library_borrower_address VARCHAR(50) NOT NULL,
    library_borrower_phone VARCHAR(50) NOT NULL
);

以库“ Books”为例,看来我需要将BoodID作为主键,将Title作为主键,但是每个表不能有多个主键。

然后我必须从Book_Copies表中获取BookID,并且Book_Loans表连接到Books中Title的主键?

在这一点上,我无所不能,并且感谢您认为可以提供帮助的任何资源。

1 个答案:

答案 0 :(得分:0)

不必太冗长。我想您想要这样的东西(用于两个表):

CREATE TABLE tbl_publisher (
    publisher_id int IDENTITY(1, 1) PRIMARY KEY,
    publisher_name VARCHAR(50) NOT NULL UNIQUE,
    address VARCHAR(50) NOT NULL,
    phone INT NOT NULL
);

CREATE TABLE books (
    book_id INT IDENTITY (1,1) PRIMARY KEY,
    title VARCHAR(50) NOT NULL UNIQUE,
    publisher_id INT NOT NULL CONSTRAINT fk_books_publisher__id FOREIGN KEY REFERENCES tbl_publisher(publisher_id) ON UPDATE CASCADE ON DELETE CASCADE
);

注意:

  • 在所有表上粘贴合成主键。即identity列。
  • 其他列可以声明为unique。很好。
  • 我打字很快。但是,我会很快提防反复输入library_book_。这样的重复只会增加写和读查询的难度。