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

创建SQL数据库。具有多个主键和外键,sql,sql-server,Sql,Sql Server,我目前正在完成一项任务,该任务要求我使用SQL Server Express创建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_nam

我目前正在完成一项任务,该任务要求我使用SQL Server Express创建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\u Copies表和Book\u Loans表中获取BookID,并连接到Books中标题的主键


我在这一点上已经无能为力了,如果您认为有任何资源可以帮助我,我将不胜感激。

没有必要这么详细。我想你想要更像这样的东西(两张桌子):

注:

  • 对于所有表,请坚持使用合成主键。即,
    identity
  • 其他列可以声明为
    唯一
    。那很好
  • 我打字很快。但我很快就会对一遍又一遍地输入
    library\u book\uu
    感到警惕。这种重复只会使编写和读取查询变得更加困难

不太清楚您指的是什么。本例中没有任何具有多个主键的表。有主键和外键关系的表。想想看:书名不能成为一本书的主键,因为很多书都可以有相同的书名。@Honeyboy Wilson我明白你的意思了。基本上,我被简单地演示了如何创建主键和外键链接。在那之后,我被要求这样做。我假设标题不是主键,我可以通过某种方式将多个不同的库链接到它。我只是想知道怎么做。感谢您的回复。@squillman基本上向我简要介绍了如何创建主键和外键链接。在那之后,我被要求这样做。我只是觉得他们漏掉了一些信息,以为我会找到答案。我想我只是不明白如何从书中获取标题,并在书的副本和借阅中两次将其链接到BookID。我试着把书中的标题作为一个主要的链接,并通过外键链接到书拷贝和图书借阅中的bookID。显然,这是行不通的。BookID连接这些表,而不是Title。
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
);