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

时间:2015-11-06 21:26:03

标签: php mysql sql sql-server database

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

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

现场是: 有三个实体; CityBooksLibrary

我必须执行一项任务,我将CityIdBookIds数组作为输入,我必须根据以下条件抛出LibraryNames

  1. Library应该在给定的City
  2. Library应该包含所有图书。
  3. 我有两种输入类型 首先是City(它会为我提供一个CityNameCityId) 和 第二个是Books(它将提供一个由多个BookIds或多个BookNames组成的数组。)

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

    这是我的一个严重问题。

2 个答案:

答案 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