一个帮助我更好地理解数据库关系的通用示例:
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 |
答案 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中的步骤。