Mysql 为3F标准模型中的3个表创建DDL和SQL语句

Mysql 为3F标准模型中的3个表创建DDL和SQL语句,mysql,sql,sql-server,Mysql,Sql,Sql Server,我希望有人能给我指出写作方向,解决我在一次技术面试写作测试中遇到的一个问题;3部分问题被要求考虑3NF,以便: 1) 编写DDL以创建所有者、狗和品种表 2) 编写SQL语句以显示3个表的所有内容 3) 编写一个优化设计,在寻找多个品种的狗时,可以简化查询表格的过程 我担心我下面的回答不正确,如果有人能告诉我,我将不胜感激: (三) (二) 提前非常感谢,祝你有个愉快的一天我会创建一个狗品种表来处理狗和品种之间的多对多关系,而且我猜狗有主人,主人可以有很多狗(如果狗可能有很多主人和副主人,那可能

我希望有人能给我指出写作方向,解决我在一次技术面试写作测试中遇到的一个问题;3部分问题被要求考虑3NF,以便:

1) 编写DDL以创建所有者、狗和品种表 2) 编写SQL语句以显示3个表的所有内容 3) 编写一个优化设计,在寻找多个品种的狗时,可以简化查询表格的过程 我担心我下面的回答不正确,如果有人能告诉我,我将不胜感激:

(三)

(二)


提前非常感谢,祝你有个愉快的一天

我会创建一个狗品种表来处理狗和品种之间的多对多关系,而且我猜狗有主人,主人可以有很多狗(如果狗可能有很多主人和副主人,那可能是另一个多对多):

3)
创建所有者(O_ID,O_Name)创建狗(D_ID,D_Name,O_ID)创建品种(B_ID,B_Name)创建狗品种(D_ID,B_ID)

(二)

1) 编写DDL以创建所有者、狗和品种表

我会这样创建它:

Create Owner(OwnerID, Name)
Create Dog(DogID, Name, OwnerID, BreedID)
Create Breed(BreedID, Name)
所有表都有ID和名称。主人的名字像约翰·多伊,狗的名字像麦克斯,狗的名字像拳击手

我在一只狗和一个品种之间建立了一对多的关系,假设一只狗只能有一个品种,但一个品种可以被多只狗拥有

我还创建了主人和狗之间的一对多关系,假设一只狗只能有一个主人,但一个主人可以有多只狗

如果一只狗可以有多个主人,那么需要另一个表来表示主人和狗之间的多对多关系:

Create Owner(OwnerID, Name)
Create Dog(DogID, Name, BreedID)
Create DogOwner(DogID, OwnerID)
Create Breed(BreedID, Name)
2) 编写SQL语句以显示3个表的所有内容

要获取所有3个表的内容,您应该使用内部联接或左联接来联接它们。后者是在Dog表的OwnerID和BreedID上接受空值的情况下

SELECT 
d.DogID, d.Name, d.OwnerID, d.BreedID,
o.OwnerID, o.Name,
b.BreedID, b.Name
FROM Dog d
INNER JOIN Owner o ON d.OwnerID=o.OwnerID
INNER JOIN Breed b ON d.BreedID=b.BreedID
3) 编写一个优化设计,简化表的查询 当寻找多种品种的狗时:

这要求狗和品种之间有多对多的关系

Create Owner(OwnerID, Name)
Create Dog(DogID, Name, OwnerID)
Create Breed(BreedID, Name)
Create DogBreed(DogID, BreedID)
现在,如果您想知道狗的品种,只需查询:

SELECT d.Name AS DogName, b.Name AS DogBreed
FROM DogBreed db
INNER JOIN Dog d ON db.DogID=d.DogID
INNER JOIN Breed b ON db.BreedID=b.BreedID

你应该在狗和主人之间有一张桥牌桌。因为它可以是1到1,所以曼玉应该有一张波斯桌。。存储所有者详细信息mySQL和sql server不一样,您使用哪一种?如果可能有多个品种的狗,在这种情况下,一个bog和BRIDE关系的多个桥接表..一只狗可以有多个所有者吗?我真的不这么认为。
SELECT 
d.DogID, d.Name, d.OwnerID, d.BreedID,
o.OwnerID, o.Name,
b.BreedID, b.Name
FROM Dog d
INNER JOIN Owner o ON d.OwnerID=o.OwnerID
INNER JOIN Breed b ON d.BreedID=b.BreedID
Create Owner(OwnerID, Name)
Create Dog(DogID, Name, OwnerID)
Create Breed(BreedID, Name)
Create DogBreed(DogID, BreedID)
SELECT d.Name AS DogName, b.Name AS DogBreed
FROM DogBreed db
INNER JOIN Dog d ON db.DogID=d.DogID
INNER JOIN Breed b ON db.BreedID=b.BreedID