我如何想出一种通用方法在SQL中将所有参考数据存储在我的数据库中?

时间:2017-12-06 15:28:58

标签: sql database-design

在我的数据库中,客户可以拥有多个帐户,并且许多证券都可以保护帐户。客户可以与银行中的另一个客户相关联。例如,房地产开发商可能与验船师相关联。

客户无法与其他客户关联两次。

我已经为SQL中的客户,账户证券和关联设置了表格。

在参考数据方面,企业有以下要求:账户,证券和协会可以是多种类型。例如,账户可以是储蓄,信贷;证券可以是债券,房屋,并且协会可以是客户1是客户2的验船师(验船师是协会)。他们不希望有许多表存储这些类型。他们想要一种通用的方法来存储数据库中的所有引用(类型)数据。

我对此非常陌生,我无法找出存储参考数据的通用方法。我是否需要另一个类型表,其类型ID为Pk,然后是描述(如果我这样做,表格将与不相关的数据混合)?

2 个答案:

答案 0 :(得分:0)

根据我的理解,您必须提供一个需要在4NF中才能可靠和可升级的设计。如果您希望正确完成此操作,您将需要一堆表来支持信息,并避免任何可能导致存储在数据库中的信息不一致的更新问题。

让我们从基本表开始:

user_table                    
ID (PK, NN)                   
First Name                    
Last Name
Any other Field

account_type_table                    
ID (PK, NN)                    
Account Type (savings, checking, etc)

account_security_type_table                    
ID (PK, NN)                    
type of security (bond, house, etc)

users_account_table
ID (PK, NN)
UserID (Foreign Key from users table)
AccountTypeID (Foreign Key from account_type table)
AccountSecurityID (Foreign key from account_security_type table)
Any other information for the account

以前的方法仅适用于帐户的一种安全类型,如果您需要为单个帐户拥有多个证券,我们需要修改user_account_table并创建另一个将帐户链接到安全类型的表格。 / p>

users_account_table
ID (PK, NN)
UserID (Foreign Key from users table)
AccountTypeID (Foreign Key from account_type table)
Any other information for the account

account_security_table
ID (PK, NN)
AccountID (Foreign key from users_account_table)
SecurityID (Foreign key from account_security_type_table)
Any other field you need.

对于测量师来说,我并不是很了解它的含义,如果你进一步解释这一点,我可以帮助你。

答案 1 :(得分:0)

如果您决定需要查找类型表,那么您可以创建类型的通用表,并添加一个描述该类型特定内容的列。

  • TypeID - IDENTITY列
  • TypeDescription - (例如:储蓄,信贷, 邦德,众议院等)
  • TypeOf(或您喜欢的任何名称) - (例如:Account,Security, 协会)