也许我今天早上需要更多咖啡,但这里有......
我有一个非常简单的库存系统。现在我有两个表:项目和库存。
项
标识
标题
年发布
广告
标识
ItemId(项目的外键)
数量
QuantityOnHand
每个项目都有一个库存,每个库存属于一个项目。两者之间的关系是一对一的。但是,当我想出这个时,基于我的设置到目前为止的关系是一对多的,因为我对库存的自动递增ID。
现在,我可以通过消除Inventory表中的自动递增ID来实现这一对比,但这让我觉得很脏。我总是使用内部id作为主键。
我看到了几个选项:
1。)删除库存中的自动递增ID字段,并感受到肮脏的感觉 2.)按原样保留表格 3.)将项目和库存合并到一个表中:ItemsInventory 4.)别的什么?
答案 0 :(得分:7)
答案 1 :(得分:1)
由于许多ORM需要单个自动增量PK,我会:
4)为Inventory.ItemId
添加一个唯一索引,它应该显示为一对一的关系。
答案 2 :(得分:1)
如果您确定映射将始终为1:1,则将两个表合并为一个。
但是,你确定这种关系总是1:1?
答案 3 :(得分:0)
使ItemId有一个唯一的约束不足吗?这似乎满足了你的要求。
答案 4 :(得分:0)
如果您提到的表结构将保持现状,那么我认为您应该将Items和Inventory合并到一个表中:ItemsInventory。
对于这样的小表,将它们垂直分区是没有意义的。这样你就可以删除额外的连接。在单个表上选择总是比连接更快。
答案 5 :(得分:0)
我将这两个表合并在一起我的主要原因是你将有重复数据 如果你坚持使用两个表,那么以及不必要的数据。查询也会更快!看看这两张桌子,我肯定会合并为一张。
产品 ID 标题 年发布
库存 ID ItemId(项目的外键) 数量 QuantityOnHand
如果合并到一个表中,你将有两个较少的数据充满数据(“ID”ItemID“可以被删除)。编写逻辑以检索并将数据发送到数据库也将更容易。
我会有这张桌子:
**ItemsInventory**
Id
Title
YearReleased
Quantity
QuantityOnHand
但是你必须确定它是一对一的,否则如果商业需要改变,你可能会给自己做很多工作。
西蒙
答案 6 :(得分:0)
如果你真的想让它成为一个简单的库存系统,那么合并表格。
不合并表的原因/它并不简单。
有多少物品没有库存记录?您的示例仅显示一些库存字段,也许这就是它可能拥有的所有内容。但是,您在库存中跟踪的字段会增长,而且大部分商品都不在库存中,您将拥有大量的空字段。
广告资源多久更新一次?如果这些字段是经常更新其他交易表(购买和销售)的结果,则没有理由仅仅因为购买或出售库存而不断更新项目表。在您当前的系统中,用户希望这些值是实时的(如果不是,那么他们就知道什么是最新的,因为他们没有进行更改。)。