Sql 一对多表格设置

Sql 一对多表格设置,sql,mysql,one-to-many,Sql,Mysql,One To Many,我有一个表,其中我必须将主键组相互关联。除了这些群体的存在之外,没有其他关于这些群体的信息。具体地说,我将多组版本的书籍存储在一起,这样我就可以知道某一组书籍是彼此的版本 我目前有一个设置,其中我有一个Edition\u Group\u ISBN列,其中任意选择一个ISBN将一组版本组合在一起 解决此问题的典型方法是使用一个单独的表,如Book_Editions,其中有一个自动递增的整数主键,如“Edition_Group_ID”,将ISBN链接在一起。有人告诉我这种方法更可取 然而,实现该系统

我有一个表,其中我必须将主键组相互关联。除了这些群体的存在之外,没有其他关于这些群体的信息。具体地说,我将多组版本的书籍存储在一起,这样我就可以知道某一组书籍是彼此的版本

我目前有一个设置,其中我有一个Edition\u Group\u ISBN列,其中任意选择一个ISBN将一组版本组合在一起

解决此问题的典型方法是使用一个单独的表,如Book_Editions,其中有一个自动递增的整数主键,如“Edition_Group_ID”,将ISBN链接在一起。有人告诉我这种方法更可取

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


考虑到在该系统下插入数据的难度,解决此问题的最佳系统是什么?

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

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);

您能给出一个INSERT查询的例子吗?在MySQL中,SCOPE_IDENTITY()的等价物是LAST_INSERT_ID()。该函数是否可以动态添加数据?我是否需要锁定表,以便在查询之间不使用新ID?不确定如何设置查询…还有一个关于表设置的问题。为什么需要编辑ID?为什么不把(FIRST_EDITION_ISBN_ID和相关的_ISBN_ID)作为主键呢?之所以有EDITION_ID,是因为在每个表中都放一个主键是一种很好的做法,我不喜欢复合主键(如何将它们连接到其他表?)。但是,每个人都有自己的桌子,你不需要锁上任何桌子;您只需要一种可靠的方法将新ID放入变量中,这样它就稳定了(
LAST\u INSERT\u ID()
听起来是在MySQL中这样做的正确方法)。MySQL文档将告诉您如何安全地执行此操作。一旦有了这些,就可以运行第二次插入。如何(以及在您的过程中何时)确定哪些书籍彼此相关?每当用户搜索书籍时(通过ISBN、标题、作者或其他方式)