首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL数据库中存储动态字段

在SQL数据库中存储动态字段
EN

Stack Overflow用户
提问于 2018-05-14 17:30:42
回答 2查看 203关注 0票数 0

我有一个‘产品’数据库,用于存储产品详细信息。对于每个产品,它可以有0- 10个备用件,通过动态表单接受它们的名称。

我不确定数据库模式应该是怎样的。从this thread那里,我得到了一些想法,这就是我想出来的。

代码语言:javascript
运行
复制
 __________________________________
|products                          |
|*********                         |
|id, name, address                 |
|__________________________________|
 __________________________________
|spareparts                        |
|*********                         |
|id, name                          |
|__________________________________|
 __________________________________
|products_spareparts               |
|*********                         |
|id, product_id, sparepartid       |
|__________________________________|

所以我的想法是在“备用件”表中有10行,因为一个产品的备用件不会超过10个。每一行都将有一个ID和name字段,其中将存储从表单接受的名称。

当创建产品时,如果有备用件,对于每个备用件,它的名称将被添加到“备用件”表中,product_id和sparepart_id将分别保存产品和备用件的id。

备件是以每个产品为基础创建的。它的名称是从表单中接受的,并且两个产品可能具有或不具有相同的备件。

这样行得通吗?有没有更好的方法来实现它?

EN

回答 2

Stack Overflow用户

发布于 2018-05-14 18:21:42

代码语言:javascript
运行
复制
 __________________________________
|products                          |
|*********                         |
|id, name, address                 |
|__________________________________|
 __________________________________
|spareparts                        |
|*********                         |
|id, name, productid               |
|__________________________________|

参考David的回答,我最终使用了上面的模式。productid只是关联产品的外键。对于每个备品备件,会向备品备件数据库中添加一个具有相应产品id的新行。在这种情况下,不需要第三个表。

票数 0
EN

Stack Overflow用户

发布于 2018-05-14 19:02:24

关系数据库使得限制0/1关系的关系变得很容易。它们使限制任意数字的数量变得不容易。

基本上,合理的解决方案需要使用触发器。触发器将计算给定产品的当前备件数量。如果它超过了某个阈值(在您的例子中是10),那么您将在另一次插入时得到一个错误。

实际上,我会通过以下两种方式之一计算备件数量来处理此问题。如果我只是坚持使用传统的数据库结构,我会在products中对备用件进行计数,并对该值使用check约束。触发器将用于保持值最新。

更有可能的是,我会将所有DML操作包装到存储过程中,并在那里进行检查。这要求所有的DML操作都通过存储过程来处理。

“不合理”的方法是将is列表作为单独的列-- spareparts1spareparts2等等。这允许您维护外键关系并限制数量。然而,这使得对备件的后续查询变得更加复杂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50327123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档