画廊经常展示相同起始日期和相同时期的库存中的几个项目。他们实际上创建了一个画廊展览,以特定的艺术家,媒体或其他主题为主题。
我想记录一个数字展览代码作为标识符、展览名称、展览主题( A:艺术家、M:媒体或O:其他)、展出的艺术品的详细信息以及组成展览的艺术品总数。一个展览必须至少包含一幅插图。
我有表画廊和艺术,其中包含我需要的信息,即gallery_id和艺术家代码/艺术作品_no(一对,以确定它是什么艺术作品,因为艺术家可以在多个艺术作品中提交),因此我将加入这两个表。
这意味着从技术上讲,库存中的多件艺术品可以成为展览的一部分,我想要记录下来。这意味着应该至少有一个与展览相关联的艺术品,因此可以有一个或多个与展览相关联的艺术品。
如果这让人困惑的话,我将exhibtion_id缩写为exhibit_id。如果我想创建一个表,以便当我搜索exhibit_id =1时,它会显示与其关联的艺术作品,那么我的约束条件应该是什么?如何实现展览必须至少包含一个艺术品创建表展示( exhibit_id NUMBER(7) NOT NULL、artist_code NUMBER(4) NOT NULL、artwork_no NUMBER(5) NOT NULL、exhibit_start_date DATE NOT NULL、exhibit_end_date DATE NOT NULL、exhibit_theme CHAR(1) NOT NULL、gallery_id NUMBER(3) NOT NULL );
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 );发布于 2020-11-09 23:38:46
artwork_no号(5)不为空,并且带有指向artwork表的前缀键即可完成此工作
发布于 2020-11-10 05:03:47
我将详细介绍Turo's注释:
”)
F212
现在,您可以通过在exhibit_item表中插入记录来将艺术作品“添加”到展览中,下面的语句将为您提供显示“展览馆”所需的所有信息:
SELECT *
FROM EXHIBIT_ITEM AS EI
JOIN EXHIBIT AS EX ON (EI.exhibit_id=EX.exhibit_id)
JOIN ARTWORK AS AW ON (AW.artwork_no=EI.artwork_no AND AW.artist_code=EI.artist_code)
WHERE EX.exhibit_id=...当然,您可以只选择一些特定的列,确切的WHERE子句将取决于您的详细要求。
如果需要像Caius Jard提出的“不允许在重叠的展览上展出一件艺术品”这样的限制,可以使用数据库触发器来实现。但这是一个不同的故事。
https://stackoverflow.com/questions/64735969
复制相似问题