简体   繁体   English

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

[英]Creating SQL database. with multiple primary and foreign keys

I'm currently working through an assignment that is asking me to create a SQL database using SQL Server Express.我目前正在完成一项要求我使用 SQL Server Express 创建 SQL 数据库的作业。 This is what it's asking for: CREATE DATABASE USING SQL这就是它的要求:使用 SQL 创建数据库

And this is the code I have tried running;这是我尝试运行的代码;

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
);

Using the library "Books" as an example it looks like I need to have BoodID as a primary key and Title as a primary key, but you can't have more than one primary key per table..以图书馆“Books”为例,看起来我需要将 BoodID 作为主键,将 Title 作为主键,但每个表不能有超过一个主键。

Then I have to take BookID from the Book_Copies table and the Book_Loans table connect to the primary key of Title in Books?然后我必须从 Book_Copies 表和 Book_Loans 表中获取 BookID 连接到 Books 中 Title 的主键?

I'm beyond stuck at this point and would appreciate any resources you think could help.我已经超出了这一点,并且会感谢您认为可以提供帮助的任何资源。

There is no need to be so verbose.没必要这么啰嗦。 I think you want something more like this (for two tables):我想你想要更像这样的东西(两张桌子):

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
);

Notes:笔记:

  • Stick with synthetic primary keys for all the tables.坚持为所有表使用合成主键。 That is, identity columns.即, identity列。
  • Other columns can be declared to be unique .其他列可以声明为unique That is fine.那也行。
  • I type quite fast.我打字很快。 And yet I would quickly wary of typing library_book_ over and over.然而,我很快就会对一遍又一遍地输入library_book_保持警惕。 Such repetition just makes it harder to write and read queries.这种重复只会让编写和读取查询变得更加困难。

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

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