【发布时间】:2021-02-20 10:44:10
【问题描述】:
画廊通常会展示几件库存商品 具有相同的开始日期和相同的时期。他们实际上创建了一个画廊 以特定艺术家、媒体或其他主题为主题的展览。
我想记录一个数字展览代码作为 标识符、展览名称、展览主题(A:艺术家,M:媒体,或 O: 其他),展出的艺术品的详细信息和艺术品的总数 构成了展览。展览必须包含至少一件艺术品。
我有表格画廊和艺术品,其中包含我需要的信息,即gallery_id 和artist_code/artwork_no(一对来识别它是什么艺术品,因为艺术家可以提交多件艺术品),因此我将加入这两个表格。
这意味着从技术上讲,库存中的多件艺术品可以成为展览的一部分,我想记录下来。这意味着应该至少有一件艺术品与展览相关联,因此可以有一件或多于一件艺术品与展览相关联。
如果这令人困惑,我将 exhibtion_id 缩短为 exhibtion_id。 如果我想创建一个表,以便如果我搜索展览 ID = 1,它会显示与之关联的艺术品,我的约束应该是什么?我怎样才能实现 展览必须包含至少一件艺术品 CREATE TABLE 展览 ( 展览 ID NUMBER(7) 非空, 艺术家代码 NUMBER(4) 非空, art_no NUMBER(5) NOT NULL, 展览开始日期日期不为空, 展览结束日期日期不为空, 展览主题 CHAR(1) NOT NULL, gallery_id NUMBER(3) 非空 );
ALTER TABLE exhibit
ADD CONSTRAINT chk_exhibit_theme CHECK ( exhibit_theme IN (
'A',
'M',
'O'
) );
COMMENT ON COLUMN exhibit.exhibit_id IS
'surrogate key added to replace exhibit composite PK';
COMMENT ON COLUMN exhibit.artist_code IS
'Code/Identifier for artist';
COMMENT ON COLUMN exhibit.artwork_no IS
'Identifier for artwork within this artist';
COMMENT ON COLUMN exhibit.exhibit_start_date IS
'Date exhibition in the gallery began';
COMMENT ON COLUMN exhibit.exhibit_end_date IS
'Date exhibition ends';
COMMENT ON COLUMN exhibit.exhibit_theme IS
'Exhibition Theme
A - Artist
M - Media
O - Other
';
COMMENT ON COLUMN exhibit.gallery_id IS
'Identifier for Gallery';
ALTER TABLE exhibit ADD CONSTRAINT gallery_painting_pk PRIMARY KEY ( exhibit_id );
ALTER TABLE exhibit
ADD CONSTRAINT exhibit_uq UNIQUE ( exhibit_start_date,
exhibit_end_date,
gallery_id );
ALTER TABLE exhibit
ADD CONSTRAINT artwork_exhibit FOREIGN KEY ( artwork_no,
artist_code )
REFERENCES artwork ( artwork_no,
artist_code );
ALTER TABLE exhibit
ADD CONSTRAINT gallery_display FOREIGN KEY ( gallery_id )
REFERENCES gallery ( gallery_id );
【问题讨论】:
-
您是否希望 Oracle 强制执行同一件艺术品不能在重叠日期范围内出现在不同画廊中的事实? (不能同时在两个地方)
-
我不知道这到底是什么意思,但是这个展台只是为了记录艺术品是展览的一部分,我已经有一张桌子可以展示画廊中的艺术品展示。
-
这意味着:我目前可以创建记录说艺术品 1 从 2021 年 1 月 1 日到 2021 年 1 月 1 日在画廊 1 中,并且艺术品 1 从 2021 年 1 月 2 日到 2 月在画廊 2 中2021 年 2 月 2 日。显然这是不可能的
-
你所说的“展览”是什么意思 - 对我来说,展览是“展览”中的单个项目,但不清楚你是否将这两个术语混为一谈,因为你的话谈论的是“展览”但是您的代码谈论“展览”。另外,对我来说,“展览”发生在“画廊”中,而“艺术品”如果是“展览”的一部分,那么它就是“展览”。这意味着“展览”指的是“画廊”(或者您的展览可以跨越多个画廊吗?)并且“展览”将“艺术品”链接到“展览”。如果展览跨越多个画廊,艺术品可以在展览期间在画廊之间移动吗?
-
我会说,应该有三张桌子,展览、艺术品和连接这两者的一张桌子
标签: sql oracle oracle11g oracle-sqldeveloper