Mysql 数据库规范化-我想?
我们有一个J2EE内容管理和电子商务系统,在这个系统中——为了一个简单的例子——假设我们有100个对象。所有这些对象都扩展了相同的基类,并且都共享许多相同的字段 让我们以两个对象为例:一个发布在网站上的新闻项目和一个在网站上销售的产品。这两者都具有共同的属性:Mysql 数据库规范化-我想?,mysql,jakarta-ee,normalization,Mysql,Jakarta Ee,Normalization,我们有一个J2EE内容管理和电子商务系统,在这个系统中——为了一个简单的例子——假设我们有100个对象。所有这些对象都扩展了相同的基类,并且都共享许多相同的字段 让我们以两个对象为例:一个发布在网站上的新闻项目和一个在网站上销售的产品。这两者都具有共同的属性: id:id、客户端id、父id(长) 标志:已删除、已存档、不活动(布尔值) 日期:创建、修改、删除(日期时间) 内容:名称、描述 当然,它们有一些不同的特性: 新闻项目:作者、发布日期 产品:价格、税金 所以(最后)这是我的问题
- id:id、客户端id、父id(长)
- 标志:已删除、已存档、不活动(布尔值)
- 日期:创建、修改、删除(日期时间)
- 内容:名称、描述
- 新闻项目:作者、发布日期
- 产品:价格、税金
- 表id:id、客户端id、父id(长)(id是主键,是所有对象的GUID)
- 表_标志:id、已删除、已存档、非活动(布尔值)
- 表_日期:id、创建、修改、删除(日期时间)
- 表_内容:id、名称、说明
- 表_新闻:id、作者、发布日期
- 表_产品:标识、价格、税
- 表_新闻:id、客户id、父id、已删除、已存档、不活动、名称、描述、作者、发布日期
- 表_产品:id、客户id、父id、已删除、已存档、不活动、名称、说明、价格、税费
- Pro:将公共字段封装到公共表中
- 赞成:需要更改公共字段吗?在一个地方换
- Pro:仅在需要时创建新字段/表
- 优点:更容易动态创建查询,重复代码更少
- 缺点:更多的连接来创建对象(不确定DB是否会对其产生影响)
- 缺点:存储对象的查询更复杂(不确定DB是否会对其产生影响)
- 缺点:随着时间的推移,普通表格将变得巨大
- 赞成者:也许最好在表之间分配所有对象的负载李>
- Pro:可以在客户端ID上索引新闻表,并在父ID上索引产品表
- 优点:更易于人眼阅读:易于在一个表中查看对象的所有字段
- :一个用于所有对象子类型的表。存储所有属性,在不适用于行的对象子类型的位置将其设置为NULL
- :一个表用于所有子类型共有的列,然后每个子类型一个表用于存储子类型特定的列
- :每个子类型一个表,存储特定于子类型的列和所有子类型共有的列
- :一个用于所有对象子类型的表。将公共属性存储为常规列,但将可选列或特定于子类型的列组合为存储XML或JSON或任何所需格式的BLOB中的字段
新闻项目
和产品
实际上不共享逻辑基类(除了对象
);它们不是普通超类的子类型
所以为了OO设计,我会选择具体的表继承。这避免了这些子类型之间的任何不适当耦合。这两个表有相同的列,但它们基本上相当于簿记,与类的功能无关,因此与表无关 嗨,比尔,我的问题一定写得比我想象的好一点,因为你的答案正是我想要的。你是对的——事实上,我的例子中的继承链看起来更像:*SuperObject*ContentObject扩展SuperObject*NewsItem扩展ContentObject*BuyableObject扩展SuperObject*ProductObject扩展BuyableObject这就是要点。因此,我会让所有对象都有公共字段的表,然后是ContentObjects有公共字段的表,如果有必要的话,还有NewsItem有公共字段的表。但是我的后续问题是,将