mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
Split dbo schema into per-domain SQL schemas (#274)
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'Social')
|
||||
EXEC('CREATE SCHEMA Social');
|
||||
@@ -0,0 +1,39 @@
|
||||
CREATE TABLE Social.UserFollow
|
||||
(
|
||||
UserFollowID UNIQUEIDENTIFIER
|
||||
CONSTRAINT DF_UserFollowID DEFAULT NEWID(),
|
||||
|
||||
UserAccountID UNIQUEIDENTIFIER NOT NULL,
|
||||
|
||||
FollowingID UNIQUEIDENTIFIER NOT NULL,
|
||||
|
||||
CreatedAt DATETIME NOT NULL
|
||||
CONSTRAINT DF_UserFollow_CreatedAt DEFAULT GETDATE(),
|
||||
|
||||
RowVersion ROWVERSION,
|
||||
|
||||
CONSTRAINT PK_UserFollow
|
||||
PRIMARY KEY (UserFollowID),
|
||||
|
||||
CONSTRAINT FK_UserFollow_UserAccount
|
||||
FOREIGN KEY (UserAccountID)
|
||||
REFERENCES Auth.UserAccount (UserAccountID)
|
||||
ON DELETE NO ACTION,
|
||||
|
||||
CONSTRAINT FK_UserFollow_UserAccountFollowing
|
||||
FOREIGN KEY (FollowingID)
|
||||
REFERENCES Auth.UserAccount (UserAccountID)
|
||||
ON DELETE NO ACTION,
|
||||
|
||||
CONSTRAINT CK_CannotFollowOwnAccount
|
||||
CHECK (UserAccountID != FollowingID
|
||||
)
|
||||
);
|
||||
|
||||
CREATE
|
||||
NONCLUSTERED INDEX IX_UserFollow_UserAccount_FollowingID
|
||||
ON Social.UserFollow(UserAccountID, FollowingID);
|
||||
|
||||
CREATE
|
||||
NONCLUSTERED INDEX IX_UserFollow_FollowingID_UserAccount
|
||||
ON Social.UserFollow(FollowingID, UserAccountID);
|
||||
@@ -0,0 +1,22 @@
|
||||
CREATE TABLE Social.UserProfile
|
||||
(
|
||||
UserProfileID UNIQUEIDENTIFIER
|
||||
CONSTRAINT DF_UserProfileID DEFAULT NEWID(),
|
||||
|
||||
Biography NVARCHAR(MAX) NOT NULL,
|
||||
|
||||
UserAccountID UNIQUEIDENTIFIER NOT NULL,
|
||||
|
||||
RowVersion ROWVERSION,
|
||||
|
||||
CONSTRAINT PK_UserProfile
|
||||
PRIMARY KEY (UserProfileID),
|
||||
|
||||
CONSTRAINT AK_UserProfile_UserAccountID
|
||||
UNIQUE (UserAccountID),
|
||||
|
||||
CONSTRAINT FK_UserProfile_UserAccount
|
||||
FOREIGN KEY (UserAccountID)
|
||||
REFERENCES Auth.UserAccount (UserAccountID)
|
||||
ON DELETE CASCADE
|
||||
);
|
||||
@@ -0,0 +1,43 @@
|
||||
CREATE TABLE Social.UserAvatar
|
||||
(
|
||||
UserAvatarID UNIQUEIDENTIFIER
|
||||
CONSTRAINT DF_UserAvatarID DEFAULT NEWID(),
|
||||
|
||||
UserProfileID UNIQUEIDENTIFIER NOT NULL,
|
||||
|
||||
PhotoID UNIQUEIDENTIFIER NOT NULL,
|
||||
|
||||
ValidFrom DATETIME2(3) NOT NULL
|
||||
CONSTRAINT DF_UserAvatar_ValidFrom DEFAULT SYSUTCDATETIME(),
|
||||
|
||||
ValidTo DATETIME2(3) NULL, -- NULL = currently active
|
||||
|
||||
RowVersion ROWVERSION,
|
||||
|
||||
CONSTRAINT PK_UserAvatar PRIMARY KEY (UserAvatarID),
|
||||
|
||||
CONSTRAINT FK_UserAvatar_UserProfile
|
||||
FOREIGN KEY (UserProfileID)
|
||||
REFERENCES Social.UserProfile (UserProfileID)
|
||||
ON DELETE CASCADE,
|
||||
|
||||
CONSTRAINT FK_UserAvatar_Photo
|
||||
FOREIGN KEY (PhotoID)
|
||||
REFERENCES Media.Photo (PhotoID)
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION,
|
||||
|
||||
CONSTRAINT CK_UserAvatar_ValidRange
|
||||
CHECK (ValidTo IS NULL OR ValidTo > ValidFrom)
|
||||
);
|
||||
|
||||
-- At most one active avatar per profile
|
||||
CREATE UNIQUE NONCLUSTERED INDEX UX_UserAvatar_ActiveOne
|
||||
ON Social.UserAvatar (UserProfileID)
|
||||
WHERE ValidTo IS NULL;
|
||||
|
||||
CREATE NONCLUSTERED INDEX IX_UserAvatar_Photo
|
||||
ON Social.UserAvatar (PhotoID);
|
||||
|
||||
CREATE NONCLUSTERED INDEX ix_UserAvatar_Profile
|
||||
ON Social.UserAvatar (UserProfileID)
|
||||
Reference in New Issue
Block a user