CREATE TABLE [Performer](
[ID] [int] NOT NULL,
… [Key] AS ('P'+CONVERT(varchar,ID])),
CREATE TABLE [Album](
[ID] [int] NOT NULL,
… [Key] AS ('A'+CONVERT(varchar,ID)),
CREATE TABLE [Internet](
[ID] [int] NOT NULL,
[Kind] [char](1) NOT NULL,
[Object] [int] NOT NULL,
[URL] [varchar](250) NOT NULL,
[Key] AS ([Kind]+CONVERT([varchar],[object])),
[Key]
, которое есть и в общих таблицах для объектов, а также в представлениях. Ссылочная целостность поддерживается триггерами. COUNT(*)
.-- Исполнители:
SELECT 1 AS [Line],
'Исполнители: '
+ CAST((SELECT COUNT(*) FROM Performer) AS VARCHAR) + ' шт., '
+ ( SELECT CAST(COUNT(*) AS VARCHAR) + ' ('
+ CAST(SUM(DATALENGTH(Picture) / 1024) AS varchar) + 'KiB) изображений, '
FROM Performer WHERE (NOT (Picture IS NULL)))
+ ( SELECT CAST(COUNT(*) AS VARCHAR) + ' ('
+ CAST(SUM(DATALENGTH([Text]) / 1024) AS varchar) + 'KiB) статей;'
FROM Performer WHERE (NOT ([Text] IS NULL)))
AS [Text]
-- Альбомы:
UNION
SELECT 2,
'Альбомы: '
+ CAST((SELECT COUNT(*) FROM Album) AS VARCHAR) + ' шт., '
+ ( SELECT CAST(COUNT(*) AS VARCHAR) + ' ('
+ CAST(SUM(DATALENGTH(Picture) / 1024) AS varchar) + 'KiB) обложек, '
FROM Album WHERE (NOT (Picture IS NULL)))
+ ( SELECT CAST(COUNT(*) AS VARCHAR) + ' ('
+ CAST(SUM(DATALENGTH([Notes]) / 1024) AS varchar) + 'KiB) статей;'
FROM Album WHERE (NOT ([Notes] IS NULL)))
-- Произведения:
UNION
SELECT 3,
'Произведения: '
+ CAST((SELECT COUNT(*) FROM Track) AS VARCHAR) + ' шт., '
+ ( SELECT CAST(COUNT(*) AS VARCHAR) + ' ('
+ CAST(SUM(DATALENGTH(Lyrics) / 1024) AS varchar) + 'KiB) текстов песен, '
FROM Track WHERE (NOT (Lyrics IS NULL)))
+ ( SELECT DISTINCT CAST(COUNT(*) AS varchar) FROM Internet
WHERE (Kind = 'T') AND (URL LIKE '%youtube%')) + ' шт. видео;'
--
ORDER BY 1
-- последний день
SELECT COUNT(*) FROM EncyclPage
WHERE CAST(PublicationLast AS DATE) = CAST(GETDATE() AS DATE)
-- последние сутки
SELECT COUNT(*) FROM EncyclPage
WHERE PublicationLast >= DATEADD(hh, -24, GETDATE())
-- последний календарный месяц
SELECT COUNT(*) FROM EncyclPage
WHERE PublicationLast >= DATEADD(dd, 1, EOMONTH(GETDATE(), -1))
-- последний месяц
SELECT COUNT(*) FROM EncyclPage
WHERE PublicationLast >= DATEADD( mm, -1, GETDATE())
Task
должны быть ссылки не на User
, а на Project_User (id)
. Ведь задания создавать и выполнять могут только те, кто работает с проектом.создается чат, принадлежащий этому проектуА почему у вас наоборот? К одному чату привязаны несколько проектов.
Chat
, а в Message
должна ссылаться на Project
и Project_User (id)
. Project_User
должна быть ссылка на отдельную таблицу Role (ID, Name)
. Не надо нарушать третью нормальную форму.Chat
:ID
Name
. "Игра", например.Project
Проект, "Игра, шарики", например. Если NULL - общий. Role
Роль - групповой по роли, "Игра, шарики, тестер", например. Если NULL - общий для проекта. Если и проект NULL - общий по роли. "Игра, тестер", например.