Oracle SQL创建表以满足需求
画廊经常陈列一些库存物品 具有相同的起始日期和相同的期限。他们实际上创建了一个画廊 以特定艺术家、媒体或其他主题为主题的展览 我想记录一个数字展览代码作为 标识符、展览名称、展览主题(A:艺术家、M:媒体或O: 其他),展示艺术品的详细信息和艺术品总数 这些构成了这次展览。展览必须至少包含一件艺术品 我有表格画廊和艺术品,其中包含我需要的信息,即画廊id和艺术家代码/艺术品编号(一对用来确定艺术品是什么,因为艺术家可以在多个艺术品中提交),因此我将加入这两个表格 这意味着从技术上讲,库存中的多件艺术品可以成为展览的一部分,我想记录下来。这意味着一个展览应该至少有一件艺术品,因此一个展览可以有一件或多件艺术品 我把展览id缩短为展览id,如果这让人困惑的话。 如果我想创建一个表,以便在搜索exhibit_id=1时,它会显示与其关联的艺术品,那么我的约束应该是什么?我怎样才能做到呢 展览必须至少包含一件艺术品 创建表格展示( 附件号(7)不为空, 艺术家代码(4)不为空, 艺术品编号(5)不为空, 附件开始日期不为空, 附件\结束\日期不为空, 附件_主题字符(1)不为空, 画廊标识号(3)不为空 ); artwork_no no no no(5)NOT NULL(带有artwork table的foreing键)将完成此工作我将详细说明注释:Oracle SQL创建表以满足需求,sql,oracle,oracle11g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle Sqldeveloper,画廊经常陈列一些库存物品 具有相同的起始日期和相同的期限。他们实际上创建了一个画廊 以特定艺术家、媒体或其他主题为主题的展览 我想记录一个数字展览代码作为 标识符、展览名称、展览主题(A:艺术家、M:媒体或O: 其他),展示艺术品的详细信息和艺术品总数 这些构成了这次展览。展览必须至少包含一件艺术品 我有表格画廊和艺术品,其中包含我需要的信息,即画廊id和艺术家代码/艺术品编号(一对用来确定艺术品是什么,因为艺术家可以在多个艺术品中提交),因此我将加入这两个表格 这意味着从技术上讲,库存中的多件
-
你已经有了展品表(虽然我会考虑把它改名为“展览会”,如果可能的话)
- 你已经有了艺术品桌
- 您应该创建一个新的展品项目表,其中包含展品id(用于识别展览)栏以及艺术品编号和艺术家代码(用于参考艺术品)
- 为艺术品添加外键约束(如上面示例中的约束)和exhibit_id
- 表格展览中的artwork_no和Artister_code列以及相应的外键不再需要
如果需要像“不允许一件艺术品在重叠的展览上展出”这样的限制,可以使用数据库触发器来实现。但这是一个不同的故事……您是否希望Oracle强制执行一个事实,即一件艺术品不能以重叠的日期范围出现在不同的画廊中?(不能同时在两个地方)我不知道这到底意味着什么,但这个展览桌只是为了记录艺术品是展览的一部分,我已经有了一张展示画廊中艺术品展示的表格。这意味着:我目前可以创建记录,说艺术品1在2021年1月1日至2021年2月1日期间在画廊1中,艺术品1在2021年1月2日至2021年2月2日期间在画廊2中。很明显,这是不可能的,你所说的“展览”是什么意思?对我来说,展览是“展览”中的一个项目,但不清楚你是否将这两个术语混为一谈,因为你的语言谈论的是“展览”,而你的代码谈论的是“展览”。此外,对我来说,“展览”发生在“画廊”中,“艺术品”是“展览”,如果它是“展览”的一部分。这意味着“展览”指的是“画廊”(或者你的展览可以跨越几个画廊?),而“展览”将“艺术品”链接到“展览”。如果展览跨越多个画廊,那么在一个展览期间艺术品可以在画廊之间移动吗?我想说,应该有三张桌子,展览,艺术品和一张桌子连接这两张桌子
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 );
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=...