我的问题是我的数据库中有超过20个表。现在的问题是,在大多数表中都会出现一些列,所以在这种情况下我该怎么办?我是否将所有列都放在每个表中,或者有更好的方法来解决这个问题?
国家/地区表示例:
CountryID, CountryName,
AddedBy, AddedTime,
LastUpdatedBy, LastUpdateDTime,
DeletedBy, DeletedTime, DeleteFlag
正如我们在上面的表结构中看到的那样,除了CountryId
和CountrynName
列之外,还有9列,所有这些列都出现在大多数表中。
我不想在所有表格中保持重复列。所以,如果有任何解决方案,请告诉我。
谢谢&问候
答案 0 :(得分:1)
这是一个设计问题,没有一个答案。
您应该将表视为包含描述对象的字段的容器。我会在表格中保存描述我的对象的所有字段,并且可以有一个公共或基类来包含不同表的公共列。
如果它们相似,则将两个表组合起来是有意义的。例如:Category和Sub-Catgory。
Category Table
- CatID
- Name
- Description
- Flag
SubCategory Table
- SubCatID
- ParentCatID
- Name
- Description
- Flag
现在我可以将这两个表分开,如上所示,或者我可以将它们组合起来。
类别 - 子类别:OneToMany关系
注意:结合这两个表在这里是有意义的,因为它们是相同的对象,描述相同的事物。
我将把它们合并如下:
Category Table
- Cat_id
- Parent_Cat_ID
- Name
- Description
- Flag
注意: Parent_cat_id
可以是null
。 null
为Categories
,parentCatID
包含subcategories
。
如果您有包含相同信息的表格。然后你应该将它们组合起来,否则将它们分开。
答案 1 :(得分:0)
您可以考虑使用包含以下列的audit
表:AddedBy
,AddedTime
,LastUpdatedBy
,LastUpdateDTime
,DeletedBy
,{{1 },DeletedTime
。然后您的国家/地区表格如下:
DeleteFlag
但你应该认真考虑是否有一个像这样的单独审计表是有意义的。这实际上取决于您在查询主实体时需要审核数据的频率。
顺便说一句,如果您需要"避免重复"是来自面向对象的思维方式(继承?),请记住它们并不真正适用于关系世界。您可以使用ORM为持久性实体建模并配置它应如何创建基础表。例如。在hibernate(我在项目中使用的ORM)中,我将定义一个Country
- CountryID,
- CountryName,
- AuditID // foreign key to audit table
实体,并将其用作组件或连接关联,具体取决于我是否总是需要审计数据。