gpt4 book ai didi

mysql - 表中的多种可能关系

转载 作者:行者123 更新时间:2023-11-29 02:36:22 27 4
gpt4 key购买 nike

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

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 列将用于告诉程序员访问哪个交叉引用表。还有其他选择吗?对于这样的事情,最佳做法是什么?

最佳答案

您可以尝试拥有一个主身份表,三个共享身份表从中提取它们的主键。您在问题中的 account 表将链接到主表。粗略描述:

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 不是自动递增值,您需要提供它们。

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

(我很确定这称为父类(super class)型/子类型表关系,但我不能肯定地说。)

关于mysql - 表中的多种可能关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com