首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表上存在多个可能的关系

表上存在多个可能的关系
EN

Stack Overflow用户
提问于 2010-12-22 04:47:18
回答 1查看 162关注 0票数 2

我有一个表,其中包含数据库中各种实体的帐户信息。目前的表格设计类似于:

代码语言:javascript
复制
CREATE TABLE account (id int(11) NOT NULL auto_increment,
                      account_id int(11) NOT NULL,
                      account_type varchar(15) NOT NULL,
                      balance decimal(12,2) NOT NULL,
                      PRIMARY KEY  (id))

account_id列引用了3个表中的一个(不是数据库强制执行的)。account_type列告诉程序员要引用哪个表。我不喜欢这种方法,因为我不能强制执行关系,并且程序员可能会意外地破坏数据。我考虑过做以下几件事之一:

为每种类型添加一个可为空的外键,或者删除account_id列并添加交叉引用表以将帐户链接到实体。account_type列将用于告诉程序员要访问哪个交叉引用表。还有没有别的选择?对于这样的事情,最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2010-12-22 04:57:46

您可以尝试使用一个主标识表,三个共享标识表可以从中提取它们的主键。然后,问题中的account表将链接到主表。松散地描述:

代码语言:javascript
复制
MasterIdentity
    Id (autoincrement)
    IdentityType (string, maybe FK to a type lookup table, whatever you want)

Table1
    Id (PK, FK to MasterIdentity)
    other data

Table2
    Id (PK, FK to MasterIdentity)
    other data

Table3
    Id (PK, FK to MasterIdentity)
    other data

Account
    Id (its own identifier as you already have)
    AccountID (FK to MasterIdentity)
    other data

插入到这三个表中的任何一个都需要插入到MasterIdentity中,从插入中获取作用域标识值,然后直接插入到所需的表中指定Id。(当然,这一切都必须在事务中是原子的。)请注意,这三个表上的Id不是自动增量值,您需要提供它们。

然后,任何需要引用这三个表(我假设是不重叠的)的表都将有一个表可供引用,该表具有标识和类型,后者告诉您哪个子表包含该记录的其余数据。

(我非常确定这称为超类型/子类型表关系,但我不能肯定。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4503755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档