Phi*_*gan 5 database sql-server sql-server-2008 sql-server-2008-r2
我有了数据库主前缀表mt_和交易前缀表tr_。但是当我浏览数据库时,我开始想知道事务表和主表的实际定义是什么。据我了解,事务表应该有一个复合主键(由其他表的两个或多个 PK 组成的主键)。但是当我查看数据库中的事务表时,有些表具有前面提到的复合键,它也具有标记为 tr_ 的表,但只有一个键标记为 PK,它们也具有属于其他表的 PK 键,但是它们甚至没有被标记为 FK ......
那么这里有人可以解释主表和事务表之间的区别以及如何在数据库中识别它们吗?
更新 这里是我的数据库的一个例子
tr_orders
OrderId int PK
CustomerId int Fk
OrderDate datetime  etc
tr_recipe
RecieptId int PK
OrderId int **(but not FK)**
PaindAmount money
recieptDate datetime
下面是完整的两张表的表结构:
tr_orders
tr_recipe
我不明白为什么这些表是tr表?
为什么不总是在所有外键上放置主键
当某件事“发生”时,它就会进入交易。有人在商店买玩具。创建一行记录它是一个玩具、它发生的日期时间以及它的成本。
十分钟后别人买了一个玩具
我们的交易表中有两条记录:
Date          Time     Product_Key     Shop_Key    Amount
--------------------------------------------------------------------------
18 Dec 2015   13:05    7                12           10
18 Dec 2015   13:15    7                12           10
这里我们有两个外键:Product_Key和Shop_Key
我们不能仅在这两个外键上创建 PK,因为这样一家商店只能销售一个玩具。
所以PK不会自动进行所有FK的
但真正需要注意的是,您的数据模型(表、字段、键、数据类型)反映了您的业务。如果一家商店真的只能销售一种玩具,那么在这两个领域进行 PK 将是一个有效的数据模型。
“事务表与主表”的一些特征
“事务”表和“主”表通常具有多对一关系,这意味着许多事务与一条主记录匹配。许多购买记录与同一个玩具记录相匹配。尽管“主”表也有 FK,但 FK 完全暴露了这种关系
“事务性”表通常有日期或某种事件 ID,并且在报告时通常会“聚合”。这可以是记录计数或金额总和。
现实世界系统的一些特征
很可能有人忘记戴上 FK 或 PK,或者可能有一个唯一的密钥(不是 PK)强制执行您期望看到的内容。
我见过一些实时系统,其中的密钥明显不正确,或者根本没有密钥。
| 归档时间: | 
 | 
| 查看次数: | 6879 次 | 
| 最近记录: |