我需要创建一个数据库,但我没有得到正确的逻辑。
这就像一个故事,但我没有任何其他方式来解释它。
现场是:
有三个实体; City
,Books
和Library
。
我必须执行一项任务,我将CityId
和BookIds
数组作为输入,我必须根据以下条件抛出LibraryNames
:
Library
应该在给定的City
。Library
应该包含所有图书。我有两种输入类型
首先是City
(它会为我提供一个CityName
或CityId
)
和
第二个是Books
(它将提供一个由多个BookIds
或多个BookNames
组成的数组。)
如果难以理解,请与我讨论,我会尝试清除这个概念。
这是我的一个严重问题。
答案 0 :(得分:0)
你可以像这样构建它:(三张桌子)
City:
Id, Name
Id
=唯一号码
Library:
Id, Name, LiesInCity
Id
=唯一号码
LiesInCity
=图书馆所在的城市Id
。
Book:
Id, Name, LiesInLibrary
Id
=号码
LiesInLibrary
=图书所在的图书馆Id
。
然后你会SELECT
你拥有的图书清单,并检查它们是否全部在Library
。 (您还可以检查Library
是否在右侧City
)
注意:如果图书有多个Book
Library
个条目
答案 1 :(得分:0)
试试这个:
create table City
(
Id int,
Name varchar(50)
);
insert into City (Id, Name)
VALUES
(1, 'Toronto'),
(2, 'Chicago')
create table Libraries(
Id int,
Name varchar(50),
CityId int
);
insert into Libraries (Id, Name, CityId)
VALUES
(1, 'Toronto Library 1', 1),
(2, 'Toronto Library 2', 1),
(3, 'Chicago Library 1', 2),
(4, 'Chicago Library 2', 2)
create table Books(
Id int,
Isbn varchar(12),
LibraryId int
);
insert into Books (Id, Isbn, LibraryId)
Values
(1, '1234567891', 1),
(2, '13344555', 1),
(3, 'x123sada', 1),
(4, 'xasdsadas', 2),
(5, 'axxzksda', 2)
select DISTINCT b.Name
from Books a
inner join Libraries b
on a.LibraryId = b.Id
where Isbn in ('1234567891', '13344555')
and b.CityId = 1
编辑: 或4NF:
create table City
(
Id int,
Name varchar(50)
);
insert into City (Id, Name)
VALUES
(1, 'Toronto'),
(2, 'Chicago')
create table Libraries(
Id int,
Name varchar(50),
CityId int
);
insert into Libraries (Id, Name, CityId)
VALUES
(1, 'Toronto Library 1', 1),
(2, 'Toronto Library 2', 1),
(3, 'Chicago Library 1', 2),
(4, 'Chicago Library 2', 2)
create table Books(
Id int,
Isbn varchar(12),
);
insert into Books (Id, Isbn)
Values
(1, '1234567891'),
(2, '13344555'),
(3, 'x123sada'),
(4, 'xasdsadas'),
(5, 'axxzksda')
create table LibraryBooks
(
LibraryId int,
BookId int
);
insert into LibraryBooks (LibraryId, BookId)
VALUES
(1, 1),
(1, 2),
(3, 1),
(2, 4),
(5, 2)
select DISTINCT c.Name
from Books a
inner join LibraryBooks b
on a.Id = b.BookId
inner join Libraries c on
c.Id = b.LibraryId
where Isbn in ('1234567891', '13344555')
and c.CityId = 1