MySql 数据库结构:基于单列和不同值进行搜索


MySql database structure for : Search based on single column and different value

我需要创建一个数据库,但我没有得到正确的逻辑。

这就像一个故事,但我没有任何其他方式来解释它。

场景是:有三个实体; CityBooksLibrary

我必须执行一个任务,在该任务中,我将获得CityIdBookIds数组作为输入,并且必须根据以下条件抛出LibraryNames

  1. Library应该在给定的City中。
  2. Library应该有所有的书。

我有两种输入类型首先是City(它将为我提供单个CityNameCityId(和第二个是Books(它将提供一个由多个BookIds或多个BookNames组成的数组(。

如果很难理解,请与我讨论,我将尝试清除这个概念。

这是我的一个严重关切。

试试这个:

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

你可以这样构建它:(三个表(

City:
Id, Name

Id = 唯一编号

Library:
Id, Name, LiesInCity

Id = 唯一编号
LiesInCity = 图书馆所在的城市Id

Book:
Id, Name, LiesInLibrary

Id = 数字
LiesInLibrary = 图书所在的Id图书馆。

然后,您将SELECT您拥有的书单,并检查它们是否都在该Library中。(您还将检查Library是否在正确的City中(

注意:如果一本书在多个Library中,则需要有多个Book条目