C# DB设计,是否规范化?
使用MS visual studio 2012、Asp.net C#MVC 4、实体框架,NopCommerce(cms) 嗨,伙计们,我有数据库设计查询,它的实际困惑我,通常我没有DBs的问题 然而,自从过渡到代码优先的方法以来,我问自己这个问题 我正在为我的NopCommerce CMS网站创建一个新插件,该插件应为ImageGallery插件 我希望数据层存储一个C# DB设计,是否规范化?,c#,asp.net-mvc-4,database-design,entity-framework-4,nopcommerce,C#,Asp.net Mvc 4,Database Design,Entity Framework 4,Nopcommerce,使用MS visual studio 2012、Asp.net C#MVC 4、实体框架,NopCommerce(cms) 嗨,伙计们,我有数据库设计查询,它的实际困惑我,通常我没有DBs的问题 然而,自从过渡到代码优先的方法以来,我问自己这个问题 我正在为我的NopCommerce CMS网站创建一个新插件,该插件应为ImageGallery插件 我希望数据层存储一个 ID, Name, LargeImg SmallImg, Urlimg 但我也想实现这个插件的功能,用户应该能够上传任何图像
ID,
Name,
LargeImg
SmallImg,
Urlimg
但我也想实现这个插件的功能,用户应该能够上传任何图像,然后将该图像关联到所选的部分,我的意思是,Img到博客帖子,或者Img到新闻帖子,Img到产品帖子,或者全部3个
现在,这三个例子是我能想到的唯一例子,但正如您所猜测的,这可能会随着其他内容类型而改变
现在我立刻想到,简单地创建一个名为…..Type的字段?还是内容类型?
然后,此字段将存储图像关联的“类型”,无论是博客、新闻还是产品项目
在这一点上,我想到了“但是如果一个图像有多个关联呢
为此,我提出了一个问题,在这种情况下,我是否应该:
- 为每个“内容类型”(非规范化)创建单独的列
- 创建名为“内容类型”(标准化)的1列
- 创建一个名为“内容类型”的完全独立的表,并使用关系
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; }
}
}
希望你们能指出实现这一点的正确方法,谢谢!一切都需要权衡 在您的情况下,标准化的好处:
- 可扩展性—添加另一种内容类型不需要更改结构/类
- 较小的表格(数据长度可变,差异可能不显著)
- 查询-如果需要在一个查询中提取多个类型,则需要反规范化
- 完整性开销-如果管理不当,可能会出现孤立数据
如果我正在设计此功能,我会选择选项3-规范化内容类型还有其他好处,例如可以使用该表作为下拉列表。答案简单,建议清晰!我同意规范化的好处通常胜过其他任何东西。在规范化内容类型的同时为内容类型创建单独的实体似乎没有什么好处他是最好的解决方案,虽然正如你所说的,查询本身并不让我担心,但完整性开销是一个问题,在这种情况下,规范化似乎会产生复杂的可能性,你认为什么是最好的可管理解决方案?我是否错过了一个?或者你是否仍然坚持选项3作为更好的邪恶?我会坚持选项3,只是男人年龄参照完整性。