我有一种情况,我需要将一组详细信息行放在一起,但“父”没有其他属性,“子”没有自己的目的。我从典型的(对我来说)方法开始
GroupOfSomething
Id
SomethingDetail
Id
GroupOfSomethingId (FK)
LookupToAnotherTable (FK)
SomethingElse
在上面,Id 是说 INT 的 PK。想知道像下面这样只有一个表而不是父/子关系的东西是否更合适(GroupId 可能是一个 UNIQUEIDENTIFIER)
GroupOfSomethings
GroupId
Id
LookupToAnotherTable (FK)
SomethingElse
为了澄清,这是针对会计系统之类的东西。这些Somethings
是帐户的 FK。将收集这些帐户,然后用户将这些帐户链接到一个或多个供应商。在链接供应商和帐户集合的级别上,还有其他元数据。然后该关系将成为另一个 1:many 集合以及其他 1:1 和 1:many 相关实体的父级。所以它最终看起来像下面这样(使用原始的 PK/FK 结构,没有定义所有其他 FK 表是什么)
GroupOfAccounts
Id (PK)
GroupOfAccountDetail
Id (PK)
GroupOfAccountId (FK)
AccountId (FK)
VendorGroupOfAccountInfo
Id (PK)
VendorId (FK)
GroupOfAccountId (FK)
VendorGroupOfAccountInfoAdditionalDetail
Id (PK)
VendorGroupOfAccountInfoId (FK)
FeeStructureId (FK)
StateId (FK)
VendorGroupOfAccountRates
Id (PK)
GroupOfAccountDetail (FK)
RatePercentage
EffectiveDate
...
很难相信
GroupOfSomething
除了Id
. 但是,如果仅此而已,并且您没有任何依赖于它的业务逻辑(例如,按 对行进行排序GroupOfSomethingId
),除了SELECT
一次只处理某些行组,那么我想不出一个很好的理由有GroupOfSomething
桌子。我能想到的唯一好的理由是,如果您想实现数据完整性,以便添加到表中的行
SomethingDetail
只能添加到现有的有效组中。表中外键的不同列表确保在表中只使用GroupOfSomething
有效的。GroupOfSomethingId
SomethingDetail