0

使用 MS Visual Studio 2012、Asp.net C# MVC 4、实体框架、NopCommerce(cms)

大家好,我有数据库设计查询,它实际上让我感到困惑,通常我对数据库没有任何问题。

然而,自从过渡到Code First 方法后,我问了自己这个问题......

我正在为我的 NopCommerce CMS 网站创建一个新插件,这个插件应该是ImageGallery Plugin

我希望数据层存储一个

ID,
Name,
LargeImg
SmallImg,
Urlimg

但我也想实现这个插件的功能,用户应该能够上传任何图像,然后将此图像关联到那里选择的部分,我的意思是 Img 到博客文章,或 Img 到新闻文章, 图像到产品帖子或所有 3。

现在这三个示例是我能想到的唯一示例,但是正如您所猜测的,这可能会根据其他内容类型而改变。

现在我立刻想到,很简单,我们只需创建一个名为.....Type 的字段?还是内容类型?然后,此字段将存储图像关联的“类型”,无论是博客、新闻还是产品项目。

在这一点上,我想到了“但是如果图像有多个关联怎么办?

这让我想到了一个问题,在这种情况下,我应该:

  • 为每个“内容类型”创建单独的列(非规范化)
  • 创建1 列称为“内容类型”(规范化)
  • 创建一个完全独立的表,称为“内容类型”并使用关系

出于某种原因,我被卡住了,我通常不会对数据库设计和实现保持空白。

下面的代码是我插件中的域类,我选择了2 号,但我不确定是否继续沿着这条路走下去。

using Nop.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hroc.Plugin.Misc.ImageGallery.Domain
{
    public class ImageItem : BaseEntity
    {
        public virtual int ImageID { get; set; }
        public virtual string Name { get; set; }
        public virtual byte[] Largeimg { get; set; }
        public virtual byte[] Smallimg { get; set; }
        public virtual string URLimg { get; set; }
        public virtual string Typeimg { get; set; }
        public virtual int LinkID { get; set; }
    }
}

希望大家能指出正确的实现方法,谢谢!

4

1 回答 1

1

With everything there is a trade-off

Benefits of normalization in your case:

  • Extensibility - adding another content type requires no structure/class change
  • Smaller tables (with variable-length data the difference may not be significant)

Drawbacks:

  • Querying - if you need to pull multiple types in one query you'll need to de-normalize.
  • Integrity Overhead - possibility of orphaned data if not managed properly

If I were designing this feature I would go with Option 3 - normalizing the content types has other advantages such as being able to use that table for drop-down lists.

于 2013-11-14T17:19:48.627 回答