我有2个表用户和公司。 这两个都有库存。
数据表
物品
ItemId | Name
================
1 | Glass
4 | Wood
用户
UId | Name
============
1 | Max
公司
CId | Name
==================
1 | EvilCorp
广告
RowId | UId | CId | ItemId | amount
=================================================
1 | 2 | Null | 4 | 10
2 | 23 | Null | 4 | 5
3 | Null | 1 | 1 | 7
4 | Null | 1 | 4 | 70
假设我有500个用户和300个公司,每个人都有20个库存槽,我的库存表中有16000个空值(6000 UId nulls + 10000 CId nulls)。
我想要一个会说出这些信息的SQL查询。
结果
Owner | Item | Amount
===========================
MAX | Wood | 10
EvilCorp | Glass | 7
EvilCorp | Wood | 40
我的问题是我的广告资源表是错误的,因为当记录是针对用户时,将针对CId显示的所有空值,反之亦然。
你知道如何在没有庞大或/和复杂的SQL查询的情况下创建一个好的表吗?
答案 0 :(得分:0)
您拥有用户,公司和所有者。用户和公司是业主。
这是一种常见的情况,可以通过各种方式列入表格。
每个表都包含使某些语句成立的行:
// "user [OId] has ..."
User(OId,...)
fk OId references Owner -- a user is an owner
// "company [OId] has ..."
Company(OId,....)
fk OId references Owner -- a company is an owner
// "Owner [OId] has ..."
Owner(OId,...)
// "[OId] owns [n] of item [itemId]"
Inventory(Oid,ItemId,amount)
fk OId references Owner
fk ItemId references Item
这来自于选择对应用程序部分做出简单陈述的表。对于变量,请阅读有关子类型和超类型的子表和超类。请参阅this回答或this一个。