如何将弱者与弱势实体联系起来

时间:2014-03-09 15:30:43

标签: database relational-database entity-relationship

如何将关系模型转换为与另一个弱实体相关的弱实体? 提前致谢!

我想将此ER MODEL转换为关系数据库结构。所以,我想知道这是否正确:

BOOK_STORE(idBookStore, address); 

SECTION(idBookStore, sectionNumber, surface) 
    WHERE idBookStore REFERS BOOK_STORE; 

SHELL(shellNumber, sectionNumber, idBookStore) 
    WHERE sectionNumber 
    REFERS TO SECTION and 
        idBookStore REFERS TO BOOK_STORE. 

所以我的问题是:这是正确的吗?

I add an ER-MODEL for being more speceific.

2 个答案:

答案 0 :(得分:1)

我会使用这个create table语法来实现ER图

CREATE TABLE bookStore (
    idBookstore   integer,
    address       text,
    PRIMARY KEY(idBookstore)
);

CREATE TABLE section (
    idBookstore   integer,
    sectionNumber integer,
    surface       text,
    FOREIGN KEY (idBookstore) REFERENCES bookStore.idBookStore,
    PRIMARY KEY (idBookstore, sectionNumber)
);

CREATE TABLE shell (
    idBookstore   integer,
    sectionNumber integer,
    shellNumber   integer,
    FOREIGN KEY (idBookstore) REFERENCES bookStore.idBookStore,
    FOREIGN KEY (sectionNumber) REFERENCES section.sectionNumber,
    PRIMARY KEY (idBookstore, sectionNumber, shellNumber)
);

这里要考虑的关键点是定义弱实体的关键是什么。然后,您可以替换相关实体的主键。

因此,在这种情况下,section的主键是元组(idBookstore,sectionNumber)。我们将用X代替这个论点。

shell与该部分相关并且是一个弱实体,所以它的关键应该是(X, shellNumber)。这与section的格式相同。我们可以展开X以获取正确的外键(idBookstore, sectionNumber, shellNumber)

答案 1 :(得分:1)

CREATE TABLE bookStore (
    idBookstore   integer,
    address       text,
    PRIMARY KEY(idBookstore)
);

CREATE TABLE section (
    idBookstore   integer,
    sectionNumber integer,
    surface       text,
    FOREIGN KEY (idBookstore) REFERENCES bookStore.idBookStore,
    PRIMARY KEY (idBookstore, sectionNumber)
);

CREATE TABLE shell (
    idBookstore   integer,
    sectionNumber integer,
    shellNumber   integer,
    FOREIGN KEY (idBookstore) REFERENCES bookStore.idBookStore,
    FOREIGN KEY (sectionNumber) REFERENCES section.sectionNumber,
    PRIMARY KEY (idBookstore, sectionNumber, shellNumber)
);