数据库设计:信用卡与信用卡类型的关系实例

时间:2010-09-03 10:29:55

标签: database-design

一个帮助我更好地理解数据库关系的通用示例:

3张表:

| Credit Card |
| ID          |
| Card #      |

| Credit Card Type |
| ID               |
| Type             |

其中CreditCardType.Type可以是AMEX,Visa,MasterCard。

| Customer |
| (PK) ID  |

1。)似乎我不需要CreditCardType的ID字段,因为Type是主键事实。为PK设置数字字段是否有益,即使varchar是唯一的?

2。)因为每张信用卡都必须有一张,而且只有...输入信用卡和信用卡类型之间的1:1识别关系吗?

3.)客户可以拥有0,1或更多信用卡。所以我在信用卡和客户之间创建了一个1:n的关系。当我这样做时,MySQL Workbench将Customer.ID字段和Customer.PersonTypeID字段添加为主键。这是我应该做的,或者我只需要将Customer.ID字段添加为PK。或者它应该是FK?

| Credit Card      | 
| (PK) ID          |
| Card #           |
| (PK) Customer.ID |
| (PK) Customer.PersonType |

| Credit Card      | 
| (PK) ID          |
| Card #           |
| (FK) Customer.ID |

2 个答案:

答案 0 :(得分:1)

我会这样做:

Customer
    Id int

CreditCardType:
    Id int
    TypeName varchar (eg. Visa)

CreditCard
    Id int
    CreditCardTypeId int
    CustomerId int
    CardNumber varchar

尽管您可以说信用卡类型不需要ID,因为TypeName是唯一的,但最好是将外键列作为数字,因为它们占用较少的磁盘空间。想象一下,你有一个CreditCardType“American Express”,这是CreditCardType的主键,你必须在CreditCard表中为每一行使用该值。如果您有数百万注册信用卡,则需要相当大的空间来存储每行的字符串。

答案 1 :(得分:0)

首先,您可以找到类并描述它们之间的关系。然后,您可以识别主键和外键(父表和子表),多重性和绘制图表。这些是DB moddeling中的步骤。