Database design 如何防止外键弄乱?

Database design 如何防止外键弄乱?,database-design,foreign-keys,Database Design,Foreign Keys,这就是我的桌子的外观: tableMembers | memberID as primary key tableAddress | addressID as primary key references memberID tableSubscription | subsID as primary key references memberID 此数据库用于订阅站点。基本上,如果将一行插入到tableMembers中,则会将相应的行插入到其他每个表中 我为最后两个表设置了外键,以便可以访问与

这就是我的桌子的外观:

tableMembers | memberID as primary key

tableAddress | addressID as primary key references memberID

tableSubscription | subsID as primary key references memberID
此数据库用于订阅站点。基本上,如果将一行插入到tableMembers中,则会将相应的行插入到其他每个表中

我为最后两个表设置了外键,以便可以访问与tableMembers相关的外键。基本上,如果我从tableAddress访问一行,我会:

SELECT * FROM tableAddress WHERE addressID = (SELECT memberID FROM tableMembers WHERE uname = 'John'); 
我的设置的问题是,当ID的同步被弄乱时,外键将不再工作。比如说,当我在tableMembers中插入一行,然后由于一些奇怪的原因,tableSubscription在几秒钟内变得不正常?或者,如果用户注册(最新memberID变为=2),则表示他/她没有订阅,这会导致补贴(保持=1)与memberID不同步。然后,新用户注册(最新成员ID变为=3)并订阅(Subfid变为=2)。这使我的问题毫无疑问。我如何防止这种情况?或者,如果你认为我不理解外键的概念,请告诉我

确保其中只有一个表具有自动递增id。其他表应从insert查询、应用程序代码中获取其id,以确保它们是正确的成员

在伪代码中:

  • 用户注册并获得 自动递增的id为3
  • 检查 带有最后一个\u插入\u id()的id
  • 使用者 订阅某物。中的id 表订阅表应该是 由应用程序代码设置为 你之前得到的价值

  • tableAddress
    tableSubscription
    设置为与
    tableMembers
    具有一对一的关系。通常,一对一的关系被合并到一个表中。。。