如何使用asp.net在sql中创建高效的数据库设计?

2024-02-15

现在我仍然是数据库的初学者,仍在学习它的所有知识。我的数据库设计有问题,我真的不知道该去哪里。基本上我正在建立一个音乐商店网站,其中包含吉他和贝斯作为产品。现在,我的数据库中共有六个品牌,包括其相应的徽标图像,用于在网页中显示。吉他和贝斯都可以使用该数据库来检索所需的品牌。

品牌 ID 名称 图片
1         伊巴涅斯    xyz.jpg
2         挡泥板    abc.jpg
3         吉布森    hjk.jpg
4         PRS        wyx.jpg
5         音乐人 cde.jpg
6         ESP        ihl.jpg

现在,我将使用 asp 中继器显示这些吉他品牌。在这种情况下,吉他网页可以毫无问题地显示所有品牌,因为它包含该品牌的所有产品。这是吉他的 aspx 代码:

<asp:Content ID='Content1' ContentPlaceHolderID='ContentPlaceHolder1' Runat='Server'>

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="repeater_ItemDataBound" ItemType="brand" SelectMethod="GetBrandData"> 
    <ItemTemplate>
        <div class="one-third">
            <div>
             <asp:LinkButton ID="linkButton" OnClick="Repeater1_OnClick" runat="server" CommandArgument='<%# Item.brandId %>'>
                 <asp:Image ID="brandImage" runat="server" height="250px" width="300px" />
             </asp:LinkButton>
            </div>

        </div>
    </ItemTemplate>

这是吉他的隐藏代码:

 protected void Page_Load(object sender, EventArgs e)
{

}

public void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Image img = e.Item.FindControl("brandImage") as Image;
    img.ImageUrl = "../Images/Brands/" + ((brand)e.Item.DataItem).image;
}

public List<brand> GetBrandData()
{
    MusicStoreDBEntities obj = new MusicStoreDBEntities();
    List<brand> list = new List<brand>();
    list = (from g in obj.brands select g).ToList();

    return list;

}

同时贝斯只能显示三个品牌:Ibanez、Fender、Musicman。这就是问题开始的地方。它基本上具有与吉他相同的 aspx 代码,但我对 sql 查询进行了更改,以便它只能返回这三个品牌。

public List<brand> GetBrandData()
{
    MusicStoreDBEntities obj = new MusicStoreDBEntities();
    List<brand> list = new List<brand>();
    list = (from g in obj.brands where g.name=="Ibanez"||g.name=="Fender"||g.name=="Musicman" select g).ToList();

    return list;

}

我在该查询中有多个 where 子句,以便我可以检索这三个品牌。我真的觉得这不是最有效的方法,并且会导致问题,如果我想添加第七个品牌,并且我需要将其显示在低音网页上,那么我每次都需要手动编辑查询,即不理想。我想知道是否有其他解决方案来管理查询或数据库设计方面的解决方案。

我希望你们能给我一些意见。


看看我的数据库设计

CREATE TABLE Brands
(
BrandID INT IDENTITY CONSTRAINT Pk_Brands Primary Key
,Beandname Varchar(200)
)


CREATE TABLE InstrumentType
(
InstrumentTypeID INT IDENTITY CONSTRAINT Pk_InstrumentType Primary Key
,InstrumentName Varchar(200)
)


CREATE TABLE Products
(
ProductsID INT IDENTITY CONSTRAINT Pk_Products Primary Key
,BrandID INT 
,InstrumentTypeID INT
,ProductImage Varchar(100)
)

ALTER TABLE [dbo].[Products]  WITH CHECK ADD  CONSTRAINT [FK_Products__Brands] FOREIGN KEY([BrandID])
REFERENCES [dbo].[Brands] ([BrandID])
GO

ALTER TABLE [dbo].[Products]  WITH CHECK ADD  CONSTRAINT [FK_Products_InstrumentTypesID] FOREIGN KEY([InstrumentTypeID])
REFERENCES [dbo].[InstrumentType] ([InstrumentTypeID])
GO

初始样本数据

INSERT INTO Brands (Beandname)
SELECT 'Ibanez' UNION ALL
SELECT 'Fender' UNION ALL
SELECT 'PRS'    UNION ALL
SELECT 'ESP'    UNION ALL
SELECT 'Warwick'

Go
INSERT INTO InstrumentType(InstrumentName)

SELECT 'Guitar'    UNION ALL
SELECT 'Bass' 

INSERT INTO Products(InstrumentTypeID,BrandID,ProductImage)

SELECT 1 , 1,'xyz.jpg' UNION ALL
SELECT 2 , 1,'hyz.jpg' UNION ALL
SELECT 1 , 2,'abc.jpg' UNION ALL
SELECT 2 , 2,'fgh.jpg' UNION ALL
SELECT 1 , 3,'yui.jpg' UNION ALL
SELECT 1 , 4,'mbm.jpg' UNION ALL
SELECT 2 , 5,'omo.jpg'

SELECT * FROM Brands 
SELECT * FROM InstrumentType 
SELECT * FRom Products

使用以下查询获取结果

SELECT 
 p.ProductsID
--,p.BrandID
,B.Beandname
--,p.InstrumentTypeID
,i.InstrumentName
,p.ProductImage

FROM Products P
INNER JOIN Brands B
    On B.BrandID=p.BrandID
INNER JOIN InstrumentType I
    On I.InstrumentTypeID=P.InstrumentTypeID

通过将参数传递到以下 Sp 将数据插入产品表

CREATE Procedure Usp_Products_Insert
(
@InstrumentTypeID INT,
@BrandID INT,
@ProductImage VARCHAR(100)
)           
AS
BEGIN
IF EXISTS(
        SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
            WHERE TABLE_NAME='Products'
        )
    Begin
        INSERT INTO Products(
                    InstrumentTypeID,
                    BrandID,
                    ProductImage)
        SELECT @InstrumentTypeID,
                @BrandID,
                @ProductImage
    END

END

EXEC Usp_Products_Insert @InstrumentTypeID=1
                        ,@BrandID=2
                        ,@ProductImage='TTTT.Jpg'

SELECT * FRom Products
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用asp.net在sql中创建高效的数据库设计? 的相关文章

  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 如何使用 aerospike 加载器在 aerospike 中加载嵌套的 csv 文件?

    我已将 JSON 文件转换为 CSV 格式 现在使用 aerospike 加载器将 CSV 加载到 Aerospike 中 我可以为简单的结构执行此操作 但如何修改 allDatatype json 的内容以在 Aerospike 中加载嵌
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • T-SQL参数嗅探重新编译计划

    我有 SQL 命令 exec sp executesql N SELECT TOP 10 FROM mytableView WHERE Name LIKE Value0 ORDER BY Id DESC N Value0 varchar 5
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • C# 枚举到字符串自动转换?

    是否可以让编译器自动将我的 Enum 值转换为字符串 这样我就可以避免每次都显式调用 ToString 方法 这是我想做的一个例子 enum Rank A B C Rank myRank Rank A string myString Ran
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 使用 unnest() 返回行?

    我尝试在完成后返回一组行UPDATE 像这样的东西 UPDATE Notis new noti SET notis noti record type FROM SELECT FROM Notis WHERE user id 2 FOR UP
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐