如何在多值属性上强加非 null?

How to impose not null on a multivalued attribute?

提问人:Guantol 提问时间:10/21/2023 最后编辑:Guantol 更新时间:10/22/2023 访问量:69

问:

我有一个具有多值属性 (Category) 的产品实体。

实体定义

在将此实体转换为 SQL 时,我为 Category 创建了一个单独的表,如下所示:

create table Product (
Bar_Code VARCHAR(15) NOT NULL,
Price DECIMAL(5,2) NOT NULL,
Discount DECIMAL(3,2) NOT NULL,
CONSTRAINT pk_product PRIMARY KEY (Bar_Code)
);

create table Category (
Bar_Code VARCHAR(15) NOT NULL,
Category VARCHAR(50) NOT NULL,
CONSTRAINT pk_category PRIMARY KEY (Bar_Code, Category),
CONSTRAINT fk_category FOREIGN KEY (Bar_Code) REFERENCES Product (Bar_Code) ON DELETE CASCADE
);

但是出现了一个问题,我如何强制要求 Product 表中的条目必须与类别中的至少 1 个条目相关?

我知道,由于 Category 上的外键约束,我无法在 Product 之前填充该表。

如果我在对 Product 执行插入操作之前或之后创建一个触发器,以检查是否存在相对条目,那么我基本上将阻止对 Table 进行任何类型的插入操作。

我解决这个问题的唯一方法是创建一个填充两个表的过程,但我想知道是否有更优雅的解决方案?

SQL 数据库 PLSQL

评论

0赞 Littlefoot 10/22/2023
“我有一个具有多值属性的实体”>>你的第一句话是你的主要问题。去掉一个多值属性,你的所有(好吧,大多数)问题都会像这样消失。
0赞 Guantol 10/22/2023
好吧,这是为了家庭作业,所以我不能退出使用多值属性,除了我试图解决的问题之外,为什么它们会如此成问题而需要删除?
0赞 The Impaler 10/22/2023
您的数据库设计是否符合 1NF 标准?请包括表定义和几行示例数据。
0赞 NickW 10/22/2023
您需要在产品和类别之间设置一个交集表。
0赞 sep7696 10/22/2023
不要使用图像或图像的任何链接

答: 暂无答案