LaughingMan

Basic ASP.NET Identity 2 DDL

Apr 23rd, 2016
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 12.92 KB | None | 0 0
  1. USE master
  2. GO
  3.  
  4. DROP DATABASE TechnicalMarineSolutions
  5. GO
  6.  
  7. CREATE DATABASE TechnicalMarineSolutions ON PRIMARY
  8. (
  9.     NAME = N'TechnicalMarineSolutions',
  10.     FILENAME = N'D:\Databases\TechnicalMarineSolutions.mdf',
  11.     SIZE = 10240KB,
  12.     MAXSIZE = UNLIMITED,
  13.     FILEGROWTH = 10240KB
  14. )
  15. LOG ON
  16. (
  17.     NAME = N'TechnicalMarineSolutions_log',
  18.     FILENAME = N'D:\Databases\Logs\TechnicalMarineSolutions_log.ldf',
  19.     SIZE = 10240KB,
  20.     MAXSIZE = 2048GB,
  21.     FILEGROWTH = 10%
  22. )
  23. GO
  24.  
  25. -- Set the compatability to Sql Server 2014
  26. ALTER DATABASE TechnicalMarineSolutions
  27. SET COMPATIBILITY_LEVEL = 120
  28. GO
  29.  
  30. USE TechnicalMarineSolutions
  31. GO
  32.  
  33. -- Enable full text search functionality on the database
  34. IF (FULLTEXTSERVICEPROPERTY('IsFullTextInstalled') = 1)
  35. BEGIN
  36.     EXEC sp_fulltext_database @action = 'enable'
  37. END
  38. GO
  39.  
  40. CREATE SCHEMA [Entity]
  41. GO
  42.  
  43. CREATE SCHEMA [Schema]
  44. GO
  45.  
  46. CREATE SCHEMA [User]
  47. GO
  48.  
  49. CREATE SCHEMA [Work]
  50. GO
  51.  
  52. CREATE FULLTEXT CATALOG [Entity]
  53. GO
  54.  
  55. CREATE FULLTEXT CATALOG [Schema]
  56. GO
  57.  
  58. CREATE FULLTEXT CATALOG [User]
  59. GO
  60.  
  61. CREATE FULLTEXT CATALOG [Work]
  62. GO
  63.  
  64. -- Entity Framework migration history for automatic code-based database migrations
  65. CREATE TABLE [Entity].__MigrationHistory
  66. (
  67.     MigrationId                             NVARCHAR(150)                                           NOT NULL,
  68.     ContextKey                              NVARCHAR(300)                                           NOT NULL,
  69.     Model                                   VARBINARY(MAX)                                          NOT NULL,
  70.     ProductVersion                          NVARCHAR(32)                                            NOT NULL,
  71.     CONSTRAINT PK___MigrationHistory PRIMARY KEY CLUSTERED (MigrationId ASC, ContextKey ASC)
  72. )
  73. GO
  74.  
  75. CREATE FULLTEXT INDEX ON [Entity].__MigrationHistory (MigrationId Language 1033, ContextKey Language 1033, ProductVersion Language 1033) KEY INDEX PK___MigrationHistory ON [Entity] WITH STOPLIST = SYSTEM
  76. GO
  77.  
  78. -- The actual roles table
  79. CREATE TABLE [User].AspNetRoles
  80. (
  81.     Id                                      NVARCHAR(128)                                           NOT NULL,
  82.     Name                                    NVARCHAR(256)                                           NOT NULL,
  83.     CONSTRAINT PK_AspNetRoles PRIMARY KEY CLUSTERED (Id ASC),
  84.     CONSTRAINT UK_AspNetRoles_Name UNIQUE (Name ASC)
  85. )
  86. GO
  87.  
  88. CREATE FULLTEXT INDEX ON [User].AspNetRoles (Id Language 1033, Name Language 1033) KEY INDEX PK_AspNetRoles ON [User] WITH STOPLIST = SYSTEM
  89. GO
  90.  
  91. INSERT INTO [User].AspNetRoles VALUES ('SYSTEM', 'System Administrator'),
  92.                                       ('DEV','Developer'),
  93.                                       ('ADMIN','Administrator'),
  94.                                       ('MOD','Moderator'),
  95.                                       ('USER','Registered User'),
  96.                                       ('PREMIUM', 'Subscribed User')
  97. GO
  98.  
  99. -- The actual user accounts table
  100. CREATE TABLE [User].AspNetUsers
  101. (
  102.     Id                                      NVARCHAR(128)                                           NOT NULL,
  103.     Email                                   NVARCHAR(256)                                           NULL,
  104.     EmailConfirmed                          BIT                                                     NOT NULL,
  105.     PasswordHash                            NVARCHAR(MAX)                                           NULL,
  106.     SecurityStamp                           NVARCHAR(MAX)                                           NULL,
  107.     PhoneNumber                             NVARCHAR(MAX)                                           NULL,
  108.     PhoneNumberConfirmed                    BIT                                                     NOT NULL,
  109.     TwoFactorEnabled                        BIT                                                     NOT NULL,
  110.     LockoutENDDateUtc                       DATETIME                                                NULL,
  111.     LockoutEnabled                          BIT                                                     NOT NULL,
  112.     AccessFailedCount                       INT                                                     NOT NULL,
  113.     UserName                                NVARCHAR(256)                                           NOT NULL,
  114.     CONSTRAINT PK_AspNetUsers PRIMARY KEY CLUSTERED (Id ASC),
  115.     CONSTRAINT UK_AspNetUsers_UserName UNIQUE (UserName ASC)
  116. )
  117. GO
  118.  
  119. CREATE INDEX IDX_AspNetUsers_Email_UserName ON [User].AspNetUsers (Email ASC, UserName ASC)
  120. GO
  121.  
  122. CREATE INDEX IDX_AspNetUsers_Confirmation ON [User].AspNetUsers (LockoutEnabled DESC, EmailConfirmed ASC, PhoneNumberConfirmed ASC)
  123. GO
  124.  
  125. CREATE FULLTEXT INDEX ON [User].AspNetUsers (Email Language 1033, PhoneNumber Language 1033, Username Language 1033) KEY INDEX PK_AspNetUsers ON [User] WITH STOPLIST = SYSTEM
  126. GO
  127.  
  128. -- Identity claims that are associated with the user. Part of the Identity schema. Currently no plans for use but required as it would be auto-generated otherwise
  129. CREATE TABLE [User].AspNetUserClaims
  130. (
  131.     Id                                      INT                         IDENTITY(1,1)               NOT NULL,
  132.     UserId                                  NVARCHAR(128)                                           NOT NULL,
  133.     ClaimType                               NVARCHAR(MAX)                                           NULL,
  134.     ClaimValue                              NVARCHAR(MAX)                                           NULL,
  135.     CONSTRAINT PK_AspNetUserClaims PRIMARY KEY CLUSTERED (Id ASC),
  136.     CONSTRAINT FK_AspNetUserClaims_AspNetUsers_UserId FOREIGN KEY(UserId) REFERENCES [User].AspNetUsers (Id) ON DELETE CASCADE
  137. )
  138. GO
  139.  
  140. CREATE INDEX IDX_AspNetUserClaims_UserId ON [User].AspNetUserClaims (UserId ASC)
  141. GO
  142.  
  143. CREATE FULLTEXT INDEX ON [User].AspNetUserClaims (UserId Language 1033, ClaimType Language 1033, ClaimValue Language 1033) KEY INDEX PK_AspNetUserClaims ON [User] WITH STOPLIST = SYSTEM
  144. GO
  145.  
  146. -- This table stores records relevant to social-network account logins that are associated with the user account
  147. CREATE TABLE [User].AspNetUserLogins
  148. (
  149.     LoginProvider                           NVARCHAR(128)                                           NOT NULL,
  150.     ProviderKey                             NVARCHAR(128)                                           NOT NULL,
  151.     UserId                                  NVARCHAR(128)                                           NOT NULL,
  152.     CONSTRAINT PK_AspNetUserLogins PRIMARY KEY CLUSTERED (LoginProvider ASC, ProviderKey ASC, UserId ASC),
  153.     CONSTRAINT FK_AspNetUserLogins_AspNetUsers_UserId FOREIGN KEY(UserId) REFERENCES [User].AspNetUsers (Id) ON DELETE CASCADE
  154. )
  155. GO
  156.  
  157. CREATE INDEX IDX_AspNetUserLogins_UserId ON [User].AspNetUserLogins (UserId ASC)
  158. GO
  159.  
  160. CREATE FULLTEXT INDEX ON [User].AspNetUserLogins (LoginProvider Language 1033, ProviderKey Language 1033, UserId Language 1033) KEY INDEX PK_AspNetUserLogins ON [User] WITH STOPLIST = SYSTEM
  161. GO
  162.  
  163. -- This table stores the records that indicate which user is in which role
  164. CREATE TABLE [User].AspNetUserRoles
  165. (
  166.     UserId                                  NVARCHAR(128)                                           NOT NULL,
  167.     RoleId                                  NVARCHAR(128)                                           NOT NULL,
  168.     CONSTRAINT PK_AspNetUserRoles PRIMARY KEY CLUSTERED (UserId ASC, RoleId ASC),
  169.     CONSTRAINT FK_AspNetUserRoles_AspNetRoles_RoleId FOREIGN KEY(RoleId) REFERENCES [User].AspNetRoles (Id) ON DELETE CASCADE,
  170.     CONSTRAINT FK_AspNetUserRoles_AspNetUsers_UserId FOREIGN KEY(UserId) REFERENCES [User].AspNetUsers (Id) ON DELETE CASCADE,
  171.     CONSTRAINT UK_AspNetUserRoles_UserId_RoleId UNIQUE (UserId ASC, RoleId ASC)
  172. )
  173. GO
  174.  
  175. CREATE INDEX IDX_AspNetUserRoles_UserId ON [User].AspNetUserRoles (UserId ASC)
  176. GO
  177.  
  178. CREATE INDEX IDX_AspNetUserRoles_RoleId ON [User].AspNetUserRoles (RoleId ASC)
  179. GO
  180.  
  181. CREATE FULLTEXT INDEX ON [User].AspNetUserRoles (UserId Language 1033, RoleId Language 1033) KEY INDEX PK_AspNetUserRoles ON [User] WITH STOPLIST = SYSTEM
  182. GO
  183.  
  184.  -- Info specific to the user
  185. CREATE TABLE [User].UserInfo
  186. (
  187.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  188.     UserId                                  NVARCHAR(128)                                           NOT NULL,
  189.     DisplayName                             NVARCHAR(128)                                           NOT NULL,
  190.     CONSTRAINT PK_UserInfo PRIMARY KEY CLUSTERED (Id DESC),
  191.     CONSTRAINT FK_UserInfo_AspNetUsers_UserId FOREIGN KEY(UserId) REFERENCES [User].AspNetUsers (Id) ON DELETE CASCADE,
  192.     CONSTRAINT UK_UserInfo_UserId UNIQUE NONCLUSTERED (UserId ASC)
  193. )
  194. GO
  195.  
  196. CREATE INDEX IDX_UserInfo_UserId ON [User].UserInfo (UserId ASC)
  197. GO
  198.  
  199. CREATE FULLTEXT INDEX ON [User].UserInfo (UserId Language 1033, DisplayName Language 1033) KEY INDEX PK_UserInfo ON [User] WITH STOPLIST = SYSTEM
  200. GO
  201.  
  202. -- Info specific to the person. Multiple people can be associated with a single user. IE: Family members
  203. CREATE TABLE [User].PersonalInfo
  204. (
  205.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  206.     RecordStatus                            BIGINT                                                  NOT NULL,
  207.     UserInfoId                              BIGINT                                                  NOT NULL,
  208.     FirstName                               NVARCHAR(128)                                           NOT NULL,
  209.     MiddleName                              NVARCHAR(128)                                           NULL,
  210.     LastName                                NVARCHAR(128)                                           NOT NULL,
  211.     Hometown                                NVARCHAR(128)                                           NULL,
  212.     CurrentTown                             NVARCHAR(128)                                           NULL,
  213.     BirthDate                               DATETIME                                                NULL,
  214.     CONSTRAINT PK_PersonalInfo PRIMARY KEY CLUSTERED (Id DESC),
  215.     CONSTRAINT FK_PersonalInfo_UserInfo_UserInfoId FOREIGN KEY(UserInfoId) REFERENCES [User].UserInfo (Id) ON DELETE CASCADE,
  216.     CONSTRAINT UK_PersonalInfo_UserInfoId UNIQUE NONCLUSTERED (UserInfoId DESC)
  217. )
  218. GO
  219.  
  220. CREATE INDEX IDX_PersonalInfo_UserInfoId ON [User].PersonalInfo (UserInfoId DESC)
  221. GO
  222.  
  223. CREATE FULLTEXT INDEX ON [User].PersonalInfo (FirstName Language 1033, MiddleName Language 1033, LastName Language 1033, Hometown Language 1033, CurrentTown Language 1033) KEY INDEX PK_PersonalInfo ON [User] WITH STOPLIST = SYSTEM
  224. GO
  225.  
  226. -- Each person can have various types of postal addresses
  227. CREATE TABLE [User].PostalAddress
  228. (
  229.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  230.     PersonalInfoId                          BIGINT                                                  NOT NULL,
  231.     AddressTypeId                           BIGINT                                                  NOT NULL,
  232.     RecordStatus                            BIGINT                                                  NOT NULL,
  233.     Recipient                               NVARCHAR(128)                                           NULL,
  234.     Attention                               NVARCHAR(128)                                           NULL,
  235.     Address1                                NVARCHAR(64)                                            NOT NULL,
  236.     Address2                                NVARCHAR(64)                                            NULL,
  237.     City                                    NVARCHAR(64)                                            NOT NULL,
  238.     [State]                                 NVARCHAR(2)                                             NOT NULL,
  239.     PostalCode                              NVARCHAR(10)                                            NOT NULL,
  240.     CONSTRAINT PK_PostalAddress PRIMARY KEY CLUSTERED (Id ASC),
  241.     CONSTRAINT FK_PostalAddress_PersonalInfo_PersonalInfoId FOREIGN KEY (PersonalInfoId) REFERENCES [User].PersonalInfo (Id) ON DELETE CASCADE
  242. )
  243. GO
  244.  
  245. CREATE INDEX IDX_PostalAddress_PersonalInfoId ON [User].PostalAddress (PersonalInfoId DESC)
  246. GO
  247.  
  248. CREATE INDEX IDX_PostalAddress_AddressTypeId ON [User].PostalAddress (AddressTypeId ASC)
  249. GO
  250.  
  251. CREATE FULLTEXT INDEX ON [User].PostalAddress (Recipient Language 1033, Attention Language 1033, Address1 Language 1033, Address2 Language 1033, City Language 1033, [State] Language 1033, PostalCode Language 1033) KEY INDEX PK_PostalAddress ON [User] WITH STOPLIST = SYSTEM
  252. GO
  253.  
  254. -- TODO: CREATE INDEXES FOR REMAINING TABLES
  255.  
  256. -- Projects that are or have been in the works
  257. CREATE TABLE [Work].Project
  258. (
  259.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  260.     RecordStatus                            BIGINT                                                  NOT NULL,
  261.     ProjectStatusId                         BIGINT                                                  NOT NULL,
  262.     Name                                    NVARCHAR(256)                                           NOT NULL,
  263.     [Description]                           NVARCHAR(MAX)                                           NULL,
  264.     EstimatedDuration                       TIME                                                    NULL,
  265.     StartDate                               DATETIME                                                NOT NULL,
  266.     ProjectedEndDate                        DATETIME                                                NOT NULL,
  267.     ActualEndDate                           DATETIME                                                NULL,
  268.     TotalDuration                           TIME                                                    NULL,
  269.     CONSTRAINT PK_Project PRIMARY KEY CLUSTERED (Id ASC)
  270. )
  271. GO
  272.  
  273. -- Scheduled appointments
  274. CREATE TABLE [Work].Appointment
  275. (
  276.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  277.     PostalAddressId                         BIGINT                                                  NOT NULL,
  278.     RecordStatus                            BIGINT                                                  NOT NULL,
  279.     AppointmentStatusId                     BIGINT                                                  NOT NULL,
  280.     Name                                    NVARCHAR(256)                                           NOT NULL,
  281.     [Description]                           NVARCHAR(MAX)                                           NULL,
  282.     ScheduledTime                           DATETIME                                                NOT NULL,
  283.     ScheduledDuration                       TIME                                                    NOT NULL,
  284.     EstimatedDuration                       TIME                                                    NOT NULL,
  285.     CONSTRAINT PK_Appointment PRIMARY KEY CLUSTERED (Id ASC),
  286.     CONSTRAINT FK_Appointment_PostalAddress_PostalAddressId FOREIGN KEY (PostalAddressId) REFERENCES [User].PostalAddress (Id) ON DELETE CASCADE
  287. )
  288. GO
  289.  
  290. -- Tasks specific to individual pieces of work
  291. CREATE TABLE [Work].Task
  292. (
  293.     Id                                      BIGINT                      IDENTITY(1,1)               NOT NULL,
  294.     RecordStatus                            BIGINT                                                  NOT NULL,
  295.     Name                                    NVARCHAR(256)                                           NOT NULL,
  296.     [Description]                           NVARCHAR(MAX)                                           NULL,
  297.     EstimatedDuration                       TIME                                                    NULL,
  298.     CONSTRAINT PK_Task PRIMARY KEY CLUSTERED (Id ASC)
  299. )
  300. GO
  301.  
  302. -- Appointments specific to a Project. Projects can have multiple appointments
  303. CREATE TABLE [Work].ProjectAppointment
  304. (
  305.     ProjectId                               BIGINT                                                  NOT NULL,
  306.     AppointmentId                           BIGINT                                                  NOT NULL,
  307.     ArrivalTime                             DATETIME                                                NULL,
  308.     FinishTime                              DATETIME                                                NULL,
  309.     DestinationTime                         DATETIME                                                NULL,
  310.     Notes                                   NVARCHAR(MAX)                                           NULL,
  311.     CONSTRAINT PK_ProjectAppointment PRIMARY KEY CLUSTERED (ProjectId ASC, AppointmentId ASC),
  312.     CONSTRAINT FK_ProjectAppointment_ProjectId FOREIGN KEY (ProjectId) REFERENCES [Work].Project (Id) ON DELETE CASCADE,
  313.     CONSTRAINT FK_ProjectAppointment_AppointmentId FOREIGN KEY (AppointmentId) REFERENCES [Work].Appointment (Id) ON DELETE CASCADE
  314. )
  315. GO
  316.  
  317. -- Tasks specific to a Project. Projects can have multiple tasks.
  318. CREATE TABLE [Work].ProjectTask
  319. (
  320.     ProjectId                               BIGINT                                                  NOT NULL,
  321.     TaskId                                  BIGINT                                                  NOT NULL,
  322.     TaskStatusId                            BIGINT                                                  NOT NULL,
  323.     EstimatedHours                          DECIMAL                                                 NOT NULL,
  324.     StartTime                               DATETIME                                                NULL,
  325.     FinishTime                              DATETIME                                                NULL,
  326.     TotalHours                              DECIMAL                                                 NOT NULL,
  327.     CONSTRAINT PK_ProjectTask PRIMARY KEY CLUSTERED (ProjectId ASC, TaskId ASC)
  328. )
  329. GO
  330.  
  331. -- Tasks appointments
  332. -- ProjectTaskAppointment? TaskAppointment?
  333. -- Tasks themselves can have specific appointments, but tasks were meant to be generic and reusable so that they can be easily added to future projects.
  334. -- Should the task appointments only be tasks that have been related to a project?
  335. -- What about tasks that aren't related to specific projects?
  336. -- Appointments are remote . . as in the guy travels to the client . . .
  337. -- How to handle travel times in addition to hourly intervaled appointment schedules?
Advertisement
Add Comment
Please, Sign In to add comment