这是一个复杂的问题,我希望得到一个简单的答案。
桥接实体可以从自己从父实体继承PK/FK属性的子类型实体继承PK吗?会议EDRD示例,我已经创建了一个场景来演示我的意思。
因此,在本例中,有一个父实体捕获有关会议的信息。会议有两种可能的子类型:个人和企业,它们有自己的“特殊”属性,不显示为不必要。
有两个桥接实体,用于捕捉参加会议的个人或企业的详细信息。您将看到标记为"A“的桥接实体具有直接连接到会议实体的桥接实体。我的理解是,PK/FK属性ConferenceNumber在CONFERENCE_BUSINESS中是可以接受的。
我不确定的是,希望其他人知道答案,是标签"B“下的桥接实体是否可以从子类型实体个人继承PK/FK属性ConferenceNumber,还是应该与会议有直接关系,比如标为"A”的桥接实体?
一个更好的例子是,当你有书籍和电影作为子类型时,你希望捕捉作者和演员的细节。由于一本书或一本书可以有多个作者,一部电影或几部电影可以有多个演员,所以我想使用子类型鉴别器来捕捉这类数据。我想知道是否有人知道(并且可以引用合法的来源来显示)示例图书和电影租赁ERD: DVD_ACTOR和BOOK_AUTHOR中的桥接实体是否可以从我创建的子类型继承PK/FK?
图书和电影租赁ERD示例
干杯。
发布于 2016-10-03 08:46:59
我成功的一种方法是:
( type_name, identifier )的复合键type_name属性设置约束来约束子类型表中的子类型在现实生活中,公司和个人都被称为法人,这是一种方便的超级型号。不过,一间公司很可能对某人有不同的识别特征(例如,公司在不同的官僚机构注册,而不是负责向个人发放社会保障号码的机构),因此,我们需要采用一种人为的识别方法。然后,我们可以将实际生活标识符推送到子类型表中。
供审议但超出本答复范围的问题:
以下SQL需要ANSI-92查询模式,但可以使用Access GUI工具重新创建。请注意,我使用LocationCountryCode作为所有类型会议的公共属性,而Slogan和OrganizerPaysExpenses分别用于公司和单个子类型:
CREATE TABLE LegalPersons
( PersonNumber INT NOT NULL UNIQUE,
PersonType CHAR(10) NOT NULL,
CHECK ( PersonType IN ( 'Individual', 'Company' ) ),
UNIQUE ( PersonType, PersonNumber ) );
CREATE TABLE Individuals
( PersonNumber INT NOT NULL UNIQUE,
PersonType CHAR(10) NOT NULL,
CHECK ( PersonType = 'Individual' ),
UNIQUE ( PersonType, PersonNumber ),
FOREIGN KEY ( PersonType, PersonNumber )
REFERENCES LegalPersons ( PersonType, PersonNumber ),
LastName VARCHAR( 35 ) NOT NULL,
FirstName VARCHAR( 35 ) NOT NULL );
CREATE TABLE Companies
( PersonNumber INT NOT NULL UNIQUE,
PersonType CHAR( 10 ) NOT NULL,
CHECK ( PersonType = 'Company' ),
UNIQUE ( PersonType, PersonNumber ),
FOREIGN KEY ( PersonType, PersonNumber )
REFERENCES LegalPersons ( PersonType, PersonNumber ),
CompanyRegisteredNumber CHAR( 8 ) NOT NULL UNIQUE );
CREATE TABLE Conferences
( ConferenceNumber CHAR( 10 ) NOT NULL UNIQUE,
PersonNumber INT NOT NULL,
PersonType CHAR(10) NOT NULL,
FOREIGN KEY ( PersonType, PersonNumber )
REFERENCES LegalPersons ( PersonType, PersonNumber ),
UNIQUE ( PersonType, ConferenceNumber ),
LocationCountryCode CHAR( 3 ) NOT NULL );
CREATE TABLE BusinessConferences
( ConferenceNumber CHAR( 10 ) NOT NULL UNIQUE,
PersonType CHAR( 10 ) NOT NULL,
CHECK ( PersonType = 'Company' ),
FOREIGN KEY ( PersonType, ConferenceNumber )
REFERENCES Conferences ( PersonType, ConferenceNumber ),
Slogan VARCHAR( 100 ) NOT NULL );
CREATE TABLE IndividualConferences
( ConferenceNumber CHAR( 10 ) NOT NULL UNIQUE,
PersonType CHAR( 10 ) NOT NULL,
CHECK ( PersonType = 'Individual' ),
FOREIGN KEY ( PersonType, ConferenceNumber )
REFERENCES Conferences ( PersonType, ConferenceNumber ),
OrganizerPaysExpenses CHAR( 1 ) DEFAULT 'Y' NOT NULL,
CHECK ( OrganizerPaysExpenses IN ( 'Y', 'N' ) ) );https://stackoverflow.com/questions/39802665
复制相似问题