【发布时间】:2017-08-10 11:27:38
【问题描述】:
我正在设计一个数据库,其中有许多产品,每个产品都属于一个且仅属于一个类别。
产品应该被标记,但只能使用它们所属类别允许的标记。
这是我目前得到的:
假设我有这 2 个类别:
- 智能手机
- 笔记本电脑
“智能手机”类别的标签:
- 双卡
- 全球定位系统
“笔记本电脑”类别的标签:
- 背光键盘
- HDMI
这种设计的问题是数据库不会阻止产品被标记为另一个类别的标签:我的应用程序代码中的一个错误很容易导致笔记本电脑被标记为“双 SIM 卡”标签,这显然不是我想要的。
我想在数据库级别使用外键而不使用触发器来防止这种情况。这可能吗?
【问题讨论】:
-
为什么不在您的产品中加入二级密钥?所以双 SIM 卡有产品 id X 并且必须与类别 id Y 等一起使用?这样您就无法将产品重复用于不同的类别 - 但它可以解决您的需求。
-
对不起,我没听懂。您是否建议在 products 表中添加一个新字段?
-
是的。这样您的产品/标签属于特定类别 - 然后在您将新产品/标签添加到类别时维护这一点
-
products 和 tags 表中已经有一个“category_id”字段。所以每个产品和每个标签都已经属于一个类别。
-
抱歉,不在您的 product_tag 表中,而是在您的 tag 表中。每个标签都应该指定它可以属于哪个类别。你永远无法让它“猜测” FK 应该如何,所以你需要指定哪些 category_ids 和哪些 product_ids 允许匹配。
标签: sql database database-design relational-database