Frage

Ok, ich versuche eine indizierte Ansicht zu machen, die gegen eine einfache Tabelle steht, in der die Ergebnisse dessen speichern, was die Leute für gut/schlecht für einen Beitrag halten. Dies sind die Ergebnisse eines Daumen nach oben / Daumen nach unten und stimmen auf Posts ab.

Also hier ist mein PSEDUO gefälschter Tisch:-

HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL

Ein Benutzer kann also nur eine Stimme pro Beitrag haben. Es ist entweder ein 1 (hilfreich) oder 0 (nicht hilfreich) <- Ich bin mir nicht sicher, ob es einen besseren Weg ist, wenn es einen besseren Weg gibt.

OK. Was ich versuche zu tun, ist eine Ansicht zu bekommen, die wie folgt aussieht.

Hilfreiche postiden Int -Identität (1,1) Nicht Null -Primärschlüssel,

PostId INT NOT NULL,
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1)
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0)

Und schließlich muss ich es schemabindierbar machen, damit ich einen Index auf der PK und dann einen Index auf dem postid hinzufügen kann.

Ich habe keine Ahnung von der SQL, um die Sicht zu machen. Irgendwelche Vorschläge?

Prost :)

War es hilfreich?

Lösung

Gedanken:

  • Sie können die Anzahl (*) in einer indizierten Ansicht nicht verwenden
  • Sie können Bit -Felder nicht aggregieren

Da sind andere Einschränkungen indizierter Ansichten

CREATE VIEW dbo.Example
WITH SCHEMABINDING
AS
SELECT
    PostId,
    SUM(CAST(IsHelpful AS bigint)) AS IsHelpfulCount,
    SUM(CAST(1-IsHelpful AS bigint)) AS IsNotHelpfulCount,
    COUNT_BIG(*) AS Dummy   --Used to satisfy requirement
FROM
    dbo.bob
GROUP BY
    PostId
GO
CREATE UNIQUE CLUSTERED INDEX IXC_Test ON dbo.Example (PostId)
GO

Bearbeiten: Entfernen Sie das Identitätsfeld, das dem ursprünglichen Frage/dem ursprünglichen Beitrag versehentlich hinzugefügt wurde.

EDIT 2 (GBN): Ich habe dieses Aggregat in einer indizierten Ansicht vergessen Auch Benötigt eine count_big (*). Fügen Sie also einfach eine als Dummy -Säule hinzu. Ich habe das getestet.

Wenn die Ansichtsdefinition eine Aggregatfunktion verwendet, muss die Auswahlliste auch count_big (*) enthalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top