GVKun编程网logo

在SQL中拥有“重复字段”的最佳方法是什么?(sql有重复的键)

12

想了解在SQL中拥有“重复字段”的最佳方法是什么?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于sql有重复的键的相关问题,此外,我们还将为您介绍关于.net–在SQLServer中存储W

想了解在SQL中拥有“重复字段”的最佳方法是什么?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于sql有重复的键的相关问题,此外,我们还将为您介绍关于.net – 在SQL Server中存储WMD输入/标记的最佳方法是什么?、c# – 在SQL Server上执行分页的最佳方法是什么?、java – 从实例方法“findbugs”警告中修改“写入静态字段”的最佳方法是什么?、Java – 在字符串中查找第一个重复字符的最佳方法是什么的新知识。

本文目录一览:

在SQL中拥有“重复字段”的最佳方法是什么?(sql有重复的键)

在SQL中拥有“重复字段”的最佳方法是什么?(sql有重复的键)

我正在尝试建立一个表,该表链接来自不同表的两个记录。这些链接本身需要与另一个表相关。因此,目前,我的表格如下所示:

link_id    (primary key)
item_id_1  (foreign key)
item_id_2  (foreign key)
link_type  (metadata)

但是,项目之间的链接不是定向的(即,项目是链接中列出的第一项还是第二项都没有关系)。理想情况下,我希望item_id字段只出现两次;因为它是我必须要小心,始终检查是否有重复项,以确保如果已经存在14到12,则永远不会创建将12到14链接的记录。

是否有一个优雅的数据库设计解决方案,还是我应该采用一个约定(例如id_1始终是较小的id编号)并在应用程序内进行重复检查?

提前致谢!

.net – 在SQL Server中存储WMD输入/标记的最佳方法是什么?

.net – 在SQL Server中存储WMD输入/标记的最佳方法是什么?

我正在使用WMD在我的项目,而不是我现有的radeditor.我一直在阅读几个关于如何存储和检索数据的帖子,我想在继续之前确保我的概念正确.

如果我的研究是正确的,这里是我应该做的.

>我应该存储编辑器数据两次(一次为HTML,一次为Markdown)
>在存储之前,我应该通过Whitelist运行HTML.
>我应该通过AntixSS来运行HTML(在显示之前)
>我应该使用Markdown数据来重新填充Markdown进行编辑.

任何人都可以确认或否认是否正确,还可以添加任何有用的投入?

参考
Reformat my code: Sanitize Html
StackOverflow: how do you store the markdown using wmd in asp net
StackOverflow: sanitize html before storing in the db or before rendering antixss library
StackOverflow: store html entities in database or convert when retrieved

解决方法

我正在写一个我正在撰写的博客引擎(谁不写博客引擎?),并在我为客户编写的多个定制CMS中实施了Markdown.

我非常类似于Stack Overflow团队的做法:

>我使用wmd.js作为客户端编辑器.
>我使用MarkdownSharp服务器端处理.
>我用Jeff Atwood’s Sanitize HTML来处理HTML.

这里有一些关于Markdown的资源:

> Introducing MarkdownSharp
> Three Markdown Gotchas
> Markdown,One Year Later
> Reverse Engineering the Markdown Editor
> WMD Edtior Reverse Engineered

底线:

>我以提交的形式存放帖子;它使用MarkdownSharp显示.>我使用Jeff Atwood的方法(On输出,而不是输入)来清理HTML.>我利用ASP.NET MVC的最佳实践(一个高度主观的术语)来处理XSS和XSRF.

c# – 在SQL Server上执行分页的最佳方法是什么?

c# – 在SQL Server上执行分页的最佳方法是什么?

我有一个超过200万条记录的数据库,我需要在我的Web应用程序上执行分页,以便在DataGrid中每页10条记录.

我已经尝试使用ROW_NUMBER(),但这样将会选择所有的200万条记录,然后只得到10条记录.我也尝试使用TOP 10,但我必须保存第一个和最后一个id来控制页面.我读过,使用DataAdapter.Fill()将选择所有的内容,然后得到我需要的10条记录.

哪个是最好的方法?我应该使用DataAdapter.Fill()吗?还是使用sql Server的函数ROW_NUMBER()?或尝试使用TOP 10?

解决方法

ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
    @Fromrow int = 1000000,@PgSize int = 10
AS
BEGIN
    ;WITH RecordsRN AS
    (
        select ID,colValue,ROW_NUMBER() over(order by colvalue) as Num from tblTest
    )
    SELECT ID Value,colValue Text FROM RecordsRN WHERE Num between @Fromrow AND (@Fromrow+@PgSize-1)
END

这是我用于分页的查询.使用它,你会得到你需要10个记录4-5秒.我在3秒内获得10条记录,我的数据库中的总记录是1000万,不要使用前10名,每次只能带来相同的10条记录.在我的情况下,我在会话中维护页面大小和起始行号(@Fromrow),并将这两个值传递给下面给出的存储过程并获取结果.
更进一步如果您使用sql 2012,您可能需要使用OFFSET和Fetch接下来的10行的事情.在google上搜索关于OFFSET关键字,您将在上面看到您想要的结果.

谢谢

java – 从实例方法“findbugs”警告中修改“写入静态字段”的最佳方法是什么?

java – 从实例方法“findbugs”警告中修改“写入静态字段”的最佳方法是什么?

我有一个类似于此类,findbugz抱怨“从实例方法(initialize()和killStaticfield()写入静态字段”).我不能在ctor中设置静态字段.

>这个问题最好的解决办法是什么?
会把staticField放在atomicreference中吗?

public class Something
 {
  private static SomeClass staticField = null;
  private AnotherClass aClass;
  public Something()
  {

  }

  public void initialize()
  {
    //must be ctor'd in initialize
    aClass = new AnotherClass();
    staticField = new SomeClass( aClass );
  }

  public void killStaticField()
  {
   staticField = null;
  }

  public static void getStaticField()
  {
    return staticField;
  }
}

解决方法

尽可能靠近您的原始设计…
public class Something {
  private static volatile SomeClass staticField = null;

  public Something() {
  }

  public static void getStaticField() {
    if(Something.staticField == null)
      Something.staticField = new SomeClass();;
    return Something.staticField;
  }
}

通过类名参考你的静态变量,这将删除findbugz警告.
将静态变量标记为volatile,这将使多参数环境中的引用更加安全.

更好的是:

public class Something {
  private static final SomeClass staticField = new SomeClass();

  public Something() {
  }

  public static void getStaticField() {
    return Something.staticField;
  }
}

Java – 在字符串中查找第一个重复字符的最佳方法是什么

Java – 在字符串中查找第一个重复字符的最佳方法是什么

我写了下面的代码来检测字符串中的第一个重复字符.
public static int detectDuplicate(String source) {
    boolean found = false;
    int index = -1;
    final long start = System.currentTimeMillis();
    final int length = source.length();
    for(int outerIndex = 0; outerIndex < length && !found; outerIndex++) {
        boolean shiftPointer = false;
        for(int innerIndex = outerIndex + 1; innerIndex < length && !shiftPointer; innerIndex++ ) {
            if ( source.charat(outerIndex) == source.charat(innerIndex)) {
                found = true;
                index = outerIndex;
            } else {
                shiftPointer = true;
            }
        }
    }
    System.out.println("Time taken --> " + (System.currentTimeMillis() - start) + " ms. for string of length --> " + source.length());
    return index;
}

我需要两件事的帮助:

>此算法的最坏情况复杂度是多少? – 我的理解是O(n).
>这是最好的方法吗?有人可以提供更好的解决方案(如果有的话)吗?

谢谢,
NN

解决方法

正如其他人所提到的,你的算法是O(n ^ 2).这是一个O(N)算法,因为HashSet #add在恒定时间内运行(散列函数在桶中正确地分散元素) – 请注意,我最初将散列集的大小调整为最大大小以避免调整大小/重新散列:
public static int findDuplicate(String s) {
    char[] chars = s.tochararray();
    Set<Character> uniqueChars = new HashSet<Character> (chars.length,1);
    for (int i = 0; i < chars.length; i++) {
        if (!uniqueChars.add(chars[i])) return i;
    }
    return -1;
}

注意:这将返回第一个副本的索引(即与前一个字符重复的第一个字符的索引).要返回该字符首次出现的索引,您需要将索引存储在Map< Character,Integer>中. (在这种情况下,Map#put也是O(1)):

public static int findDuplicate(String s) {
    char[] chars = s.tochararray();
    Map<Character,Integer> uniqueChars = new HashMap<Character,Integer> (chars.length,1);
    for (int i = 0; i < chars.length; i++) {
        Integer prevIoUsIndex = uniqueChars.put(chars[i],i);
        if (prevIoUsIndex != null) {
            return prevIoUsIndex;
        }
    }
    return -1;
}

关于在SQL中拥有“重复字段”的最佳方法是什么?sql有重复的键的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.net – 在SQL Server中存储WMD输入/标记的最佳方法是什么?、c# – 在SQL Server上执行分页的最佳方法是什么?、java – 从实例方法“findbugs”警告中修改“写入静态字段”的最佳方法是什么?、Java – 在字符串中查找第一个重复字符的最佳方法是什么的相关知识,请在本站寻找。

本文标签: