一对多表格设置

时间:2010-09-09 02:34:49

标签: sql mysql one-to-many

我有一张表,我必须将主键组相互关联。除了它们之外,没有关于这些组的信息。具体来说,我将各种版本的书籍存储在一起,所以我可以知道某些书籍是彼此的版本。

我目前有一个设置,我有一个Edition_Group_ISBN列,其中任意一个ISBN被选中以将一组版本组合在一起。

这个问题的典型方法是有一个单独的表,如Book_Editions,我将有一个自动递增的整数主键,如“Edition_Group_ID”将ISBN链接在一起。我被告知这种方法更可取。

但是,实现该系统的问题与数据的加载有关。如何在版本组中动态加载?一种解决方案可能是锁定表并对自动增量中的下一个ID执行事务。我想这会比现在的方法更慢,更麻烦。

鉴于在该系统下插入数据的困难,解决这个问题的最佳系统是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过在版本组表格中使用ISBN表外键加载版本组,然后使用ISBN Books表的主键和您的外键在查询中将两个表内连接在一起版本在联接中的组表。

ISBN Table
    ISBN_ID                                    // Auto-incrementing Primary Key
    ISBN
    Book_Title
    .etc

EDITIONS Table
    Edition_ID
    FIRST_EDITION_ISBN_ID
    ASSOCIATED_ISBN_ID                         // Foreign Key to ISBN table

大多数数据库系统都有办法返回新插入记录的主键ID,因此:

NEW_ID = INSERT INTO ISBN (ISBN, BOOK_TITLE) 
         VALUES (12345678, "The Frog Prince"); 
         SELECT SCOPE_IDENTITY();              // Returns new ID from ISBN table.

INSERT INTO EDITIONS (FIRST_EDITION_ISBN_ID, ASSOCIATED_ISBN_ID)
    VALUES (12345678, NEW_ID);